多表问题

问题描述:

我有3个表格,我希望一次处于活动状态。
第一个窗体是用于启动另外两个窗体的主窗口。我面临的问题是数据传输。当我使用.ShowDialog();启动和传输数据时,它可以工作。
但我不希望窗体锁定访问到该窗口。当我使用表格.Show();它将传输数据为默认“0”。有没有办法解决?
有没有更好的方法来实现相同的结果,例如实用程序窗口?
我最终的目标是有独立的活动窗口,它们将以第一种形式存储变量。多表问题

public partial class CH_Info : Form 
{ 
    private Ch_Creation MyChcreation; 

    public CH_Info() 
    { 
     InitializeComponent(); 
     MyChcreation = new Ch_Creation(); 
    } 
    private void UpdateBtn_Click(object sender, EventArgs e) 
    { 
     //this grabs the text from the CH_Creation's STR,DEX,CON,INT,WIS,CHA Total Label 
     StrResLbl.Text = MyChcreation.StrTotalLbl.Text; 
     DexResLbl.Text = MyChcreation.DexTotalLbl.Text; 
     ConResLbl.Text = MyChcreation.ConTotalLbl.Text; 
     WisResLbl.Text = MyChcreation.WisTotalLbl.Text; 
     IntResLbl.Text = MyChcreation.IntTotalLbl.Text; 
     ChaResLbl.Text = MyChcreation.ChaTotalLbl.Text; 
    } 

This is using CH_Info MyChInfo = new CH_Info(); MyChInfo.Visible = true;this is using .ShowDialog();(它的工作原理的唯一方法是,如果对话框关闭)

的目标是有两个其他形式作为实用程序窗口,我可以离开了,并重新在程序关闭之前保持数据的同时打开。
现在我只有form3返回数据到Form2。但是我认为,如果我发现将变量存储在第一个表单中,我将能够实现我想要的。当我重新打开它们时,将数据返回到其他表单。但要澄清,我目前的问题是保持所有3表格活动,而不使用.ShowDialog();而就像我之前所说,我可以传输数据罚款,只要我不使用.Show();

感谢您的帮助球员。

+1

您需要了解一个类的实例是什么。多个实例可以存在多少个以及为什么一个实例的数据与另一个实例的数据不同。编写_MyChcreation = new Ch_Creation(); _创建一个Ch_Creation类的新实例。它不是已经显示的表单的同一个实例 – Steve

+0

是否有另一种方法来创建相同的实例? – AnimalChubs

+0

您的应用程序中始终只有一种CH_Creation类型的窗体打开? – Steve

如果只有一种Ch_Creation类型的窗体始终打开,那么查找Application.OpenForms集合以查找Ch_Creation类型的打开窗体并使用Winforms引擎为您存储的实例很简单收集

public CH_Info() 
{ 
    InitializeComponent(); 
    MyChcreation = Application.OpenForms.OfType<Ch_Creation>().FirstOrDefault(); 
} 
private void UpdateBtn_Click(object sender, EventArgs e) 
{ 
    if(MyChcreation != null) 
    { 
     StrResLbl.Text = MyChcreation.StrTotalLbl.Text; 
     DexResLbl.Text = MyChcreation.DexTotalLbl.Text; 
     ConResLbl.Text = MyChcreation.ConTotalLbl.Text; 
     WisResLbl.Text = MyChcreation.WisTotalLbl.Text; 
     IntResLbl.Text = MyChcreation.IntTotalLbl.Text; 
     ChaResLbl.Text = MyChcreation.ChaTotalLbl.Text; 
    } 
    else 
    { 
     StrResLbl.Text = ""; 
     DexResLbl.Text = ""; 
     ConResLbl.Text = ""; 
     WisResLbl.Text = ""; 
     IntResLbl.Text = ""; 
     ChaResLbl.Text = ""; 
    } 
} 

作为预防措施总是检查是衡量一个参考变量(如MyChcreation)是试图使用它的成员之前,空...

+0

这似乎回答了我的问题。我唯一遇到的是CH_Creation必须在CH Iinfo之前打开。否则它不会获取数据。 – AnimalChubs