【问题标题】:How to show existing form from another form?如何从另一个表单显示现有表单?
【发布时间】:2017-10-06 11:17:50
【问题描述】:

我有 Form1 和 Form2,在 Form1 中我有一些文本框,例如用户名、密码等等……还有一个文本框“区域”。当用户点击“区域”(Form1.hide())时,Form2 打开女巫有 5 个带有区域名称的标签。

那么当用户单击 Form2 中的区域名称时,我该如何做到这一点,Form1 将在其上显示该区域?并保留用户在区域点击之前输入的所有数据。

类似这样的东西(在表格 2 中):

private void center_Click(object sender, EventArgs e)
    {
        this.Hide();
        Form1.region = "center";
        Form1.show();
    }

【问题讨论】:

  • 您只需要订阅表单的 FormClosing 事件。当它触发并且 e.Cancel 为 false 时,您就知道它即将死亡,因此调用 this.Show() 是个好主意。请注意,FormClosed 听起来是一个更好的主意,但为时已晚,另一个应用程序的窗口可能会获得焦点。另请注意,您每天使用的应用程序并不多,它们通常有一个主窗口并在窗口内切换内容。就像 UserControl 可以帮到你。

标签: c# winforms


【解决方案1】:

尝试创建一个Form2的实例并调用ShowDialog()方法来展示它

Form2 form2= new Form2();
form2.ShowDialog();

【讨论】:

    【解决方案2】:

    创建 Form2 时,只需将 Form1 作为参数传递并在单击事件中编辑文本框值。

    在表格 1 上:

    private void click_on_region(object sender, EventArgs e)
    {
        this.Hide();
        Form2 frm2 = new Form2(this);
        Form2.Show();
    }
    

    在表格 2 上:

    Form1 _frm1;
    public Form_Main(Form1 frm)
    {
        InitializeComponent();
        _frm1 = frm;   
    }
    private void center_Click(object sender, EventArgs e)
    {
        this.Hide();
        _frm1.textBox_region.Text = whateverobject.Text;
        _frm1.Show();
    }
    

    这可能不是最漂亮的,但它会适合初学者。

    【讨论】:

      【解决方案3】:

      表格 1 代码

      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
          }
      
      
          private void button1_Click(object sender, EventArgs e)
          {
              Form2 objForm2 = new Form2();
              objForm2.ShowDialog();
              textBox_Region.Text = objForm2.RegionName;
          } 
       }
      

      和Form 2代码

       public partial class Form2 : Form
       {
          public string RegionName
          {
              get
              {
                  return textBox_Form2_Region.Text.ToString();
              }
              set { }
      
          }
          public Form2()
          {
              InitializeComponent();
          }
      }
      

      【讨论】:

        【解决方案4】:

        在表格 2 上

        private void center_Click(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1();
            frm1.textbox_region = whateverobject.text;
            this.hide();
            frm1.show();
        }
        

        这将打开一个带有区域文本的 form1。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-11
          • 1970-01-01
          • 1970-01-01
          • 2015-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多