C#——单击按钮实现返回上一级窗口方法

一,实现父窗体的隐藏及显现

 

假设Form1是父窗体,Form2是新的窗体

Form1的按钮button1代码:
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(this);//把form1传给form2
this.Hide();//把自己隐藏了
//form2.ShowDialog();//2种显示方法都可以
form2.Show();
}

Form2的代码:

public partial class Form2 : Form
{
Form1 _form1;
public Form2(Form1 form1)
{
InitializeComponent();
_form1 = form1;
}

private void button1_Click(object sender, EventArgs e)
{
//把自己关闭,并显示Form1
this.Close();
_form1.Show();
}
}

 

二,多线程关闭窗体


Form1 为欢迎界面, close为关闭按钮,Form 2为主界面
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
th = new Thread(new ThreadStart(StartNewForm));
}
private Thread th;
private void StartNewForm()
{
From1 mf = new From2();
Application.Run(mf);//启动主界面
}
private void close_Click(object sender, EventArgs e)
{
this.Close();//关闭窗体
th.Start();//启动另一个线程
}
}

### C# 中按下 Enter 键触发 Button 单击事件的方法 在 Windows Forms 应用程序中,可以通过监听 `KeyPress` 或者 `KeyDown` 事件来检测用户是否按下了 Enter 键,并在此基础上模拟按钮点击行为。 对于简单的窗体应用而言,在 TextBox 控件上设置相应的按键响应逻辑可以满足需求。当检测到用户的输入为回车符 (`'\r'`) 时,则手动调用目标按钮的 Click 方法[^2]: ```csharp private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { button1.Focus(); button1_Click(this, new EventArgs()); } } ``` 而在 WPF 环境下,通常建议采用命令模式(Command Pattern),即定义一个默认动作,默认情况下该动作会在用户按下 Enter 后被执行。这不仅限于特定控件,而是整个窗口级别的交互设计[^3]: ```csharp // XAML部分 <Window x:Class="YourNamespace.MainWindow" ... DefaultButton="{Binding ElementName=yourButton}"> </Window> <!-- 或者 --> <Button Name="yourButton" ... /> <TextBox AcceptsReturn="False"> <i:Interaction.Triggers> <i:EventTrigger EventName="PreviewKeyUp"> <i:InvokeCommandAction Command="{Binding Path=DataContext.DefaultAction}" /> </i:EventTriggers> </i:Interaction.Trigger> </TextBox> ``` 此外,还有一种更为通用的方式是在窗体级别指定默认提交按钮。这种方式适用于多个文本框共存的情况——只要当前有任意一个文本框处于激活状态并接收到了 Enter 输入,就会自动触发展开关联的操作[^4]。 ```csharp protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { const int WM_KEYDOWN = 0x100; const int WM_SYSKEYDOWN = 0x104; if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN)) { switch (keyData) { case Keys.Return: this.button1.PerformClick(); return true; // 表明已经处理完毕此消息 } } return base.ProcessCmdKey(ref msg, keyData); } ``` 上述三种方式各有优劣,具体选择取决于实际应用场景以及个人偏好。如果只是针对单一组件进行简单集成的话,直接重写 `textBox1_KeyPress` 函数可能是最直观的做法;而对于更复杂的应用场景来说,考虑使用 MVVM 架构下的命令绑定或许更加合适一些。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值