设置 Application.Run(new Form1());其中form1为主窗口

设置 Application.Run(new Form1());其中form1为主窗口,然后在form1的load方法里面这样写:
代码 
private void Form1_Load(object sender, EventArgs e) 
        { 
            Form f2 = new Form2(); 
            f2.ShowDialog(); 
            if (f2.DialogResult == DialogResult.OK) 
            { 
                MessageBox.Show("hello");               //    登陆成功显示hello 
            } 
            else { 
                this.Close(); 
            } 
        }


在form2的登陆按钮的事件上这样写


private void button1_Click(object sender, EventArgs e) 
        { 
            if (textBox1.Text == "a") { //验证密码 
                this.DialogResult = DialogResult.OK; 
                this.Close(); 
            } 
        }
如果这样写的话,是可以进行登陆验证的。主要原理就是利用的DialogResult = DialogResult.OK来实现的,
首先程序load主form1,主form1就会new一个form2并弹出登陆窗口,在登陆窗口验证密码正确以后设置DialogResult.OK这一句,再将对话框关闭。关闭以后from_load方法继续运行判断弹出的登陆框form2的DialogResult是否是ok,如果是,则加载主表单,如果否,则关闭主表单。
第二种方法:
将mian方法改写成
Form f2 = new Form2(); 
            f2.ShowDialog(); 
            if (f2.DialogResult == DialogResult.OK) 
                Application.Run(new Form1()); 
            else return;
在main方法运行的时候就先加载form2登陆框进行验证,如果验证通过才run(new form1())。如果不通过则返回。
备注:
还有一种就是将登陆框hide,直接是 this.hide()而不是this.close()。以上这两种方法,第二种比第一种简单一些,它们都可以避免X掉登陆框之后任然加载主表单的情况。同时这两种方法都不会出现主次窗口都显示和关掉一个窗口另外一个也关闭的情况
### 如何运行新的 Form1 窗体实例 要在 C# 的 Windows Forms 应用程序中运行一个新的 `Form1` 实例,通常需要通过调用 `Application.Run()` 方法来启动窗体。以下是具体的操作方法: #### 启动新窗体实例的核心代码 以下是一段典型的代码片段用于启动一个名为 `Form1` 的窗体实例[^1]。 ```csharp using System; using System.Windows.Forms; namespace WindowsFormsAppExample { public class Program { [STAThread] public static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); // 运行新的 Form1 实例 } } public partial class Form1 : Form { public Form1() { InitializeComponent(); // 初始化组件 } } } ``` 上述代码展示了如何在应用程序入口点(即 `Main` 函数)中初始化并显示 `Form1` 窗体。这里的关键在于 `Application.Run(new Form1())` 行,该行负责创建并展示 `Form1` 的实例。 #### 关于异步编程的扩展应用 如果希望进一步提升用户体验,可以考虑将异步编程技术引入到窗体的应用逻辑中。例如,在执行耗时操作时不阻塞 UI 线程,可以通过使用 `async/await` 或其他异步机制实现这一点[^2]。 假设我们需要在一个按钮点击事件中加载数据而不冻结界面,则可以这样编写代码: ```csharp private async void buttonLoadData_Click(object sender, EventArgs e) { try { labelStatus.Text = "Loading data..."; var result = await LoadDataAsync(); // 调用异步方法 textBoxResult.Text = result; // 显示结果 labelStatus.Text = "Data loaded successfully."; } catch (Exception ex) { MessageBox.Show($"Error loading data: {ex.Message}"); } } private Task<string> LoadDataAsync() => Task.Run(() => { // 模拟长时间运行的任务 System.Threading.Thread.Sleep(3000); return "Sample Data Loaded"; }); ``` 这段代码利用了 `Task` 和 `async/await` 来确保即使有后台任务正在运行,UI 仍然保持响应状态。 #### 带图标的工具栏集成 除了基础功能外,还可以增强窗体的功能性,比如添加带图标的工具栏。这不仅提升了视觉效果,还增强了用户的交互体验[^3]。 下面是如何向 `Form1` 添加简单工具栏的一个例子: ```csharp public Form1() { InitializeComponent(); ToolStrip toolStrip = new ToolStrip(); this.Controls.Add(toolStrip); ToolStripButton btnOpen = new ToolStripButton("Open", Properties.Resources.OpenIcon); ToolStripButton btnSave = new ToolStripButton("Save", Properties.Resources.SaveIcon); toolStrip.Items.AddRange(new ToolStripItem[] { btnOpen, btnSave }); btnOpen.Click += BtnOpen_Click; btnSave.Click += BtnSave_Click; } private void BtnOpen_Click(object sender, EventArgs e) { MessageBox.Show("Open clicked!"); } private void BtnSave_Click(object sender, EventArgs e) { MessageBox.Show("Save clicked!"); } ``` 以上代码演示了如何动态构建一个具有两个按钮(打开和保存)的工具栏,并分别为它们分配图标以及相应的事件处理器。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值