【发布时间】:2014-05-05 08:01:14
【问题描述】:
我有 2 个表格。表格 1 是 mainForm,表格 2 是 WordSearch。我想将 newSystemRec 的值从 WrodSearch 传递给 mainForm。我的两个表单都可以访问 datalayer.cs 文件。我从哪里获得 WordSearch 表单中的 newSystemRec 值。 这是我的 WordSearch 代码:
public enum Category { Schematic, Component }
public partial class WordSearch : Form
{
private DataLayer dataLayer;
private MainForm mainForm;
public event EventHandler<JumpToEventArgs> JumpTo;
public event EventHandler ModeChanged;
public event EventHandler SystemChanged;
public event EventHandler<SimEventArgs> SimChanged;
private SystemMode systemMode;
private p2p p2pMode, originalMode;
private Int32 systemRec;
private string fileName;
public Int32 projectRec { get; set; }
public WordSearch(Category category, String title)
{
InitializeComponent();
this.dgSearch.Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
this.Icon = Properties.Resources.TDXm;
if (category == Category.Schematic)
SetDefaultCategory(true, false);
else
SetDefaultCategory(false, true);
dataLayer = new DataLayer(false);
rbRefDes.CheckedChanged += new System.EventHandler(this.rb_CheckedChanged);
rbComp.CheckedChanged += new System.EventHandler(this.rb_CheckedChanged);
rbSchematic.CheckedChanged += new System.EventHandler(this.rb_CheckedChanged);
rdoTrace.Click += new EventHandler(this.rbTraceAndSim);
rdoSim.Click += new EventHandler(this.rbTraceAndSim);
lblModel.Text = title;
}
private void WordSearch_FormClosing(object sender, FormClosingEventArgs e)
{
if (fileName == null) return;
if (originalMode != p2pMode)
{
if (ModeChanged != null)
ModeChanged(this, EventArgs.Empty);
}
//Need to pass the value below
Int32 newSystemRec = dataLayer.GetSystemType(fileName, p2pMode);
if (systemRec != newSystemRec)
{
if (SystemChanged != null)
SystemChanged(null, EventArgs.Empty);
}
}
这是我的主窗体:
public Int32 newSystemRec { get; set; }
public MainForm()
{
InitializeComponent();
InitializeP2Trace();
dataLayer.InsertHandler(this.Handle);
Args = Environment.GetCommandLineArgs();
MethodInvoker mi = new MethodInvoker(EmsJump);
this.dgComp.Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
this.dgSchematic.Style.VerticalAlignment = C1.Win.C1TrueDBGrid.AlignVertEnum.Center;
dgSchematic.Splits[0].ColumnCaptionHeight = 28;
dgComp.Splits[0].ColumnCaptionHeight = 28;
xmlPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "temp.xml");
tsMarkup.Location = new Point(355, 0);
if (Args != null)
mi.Invoke();
}
private void wordSearch_SystemChanged(object sender, EventArgs e)
{
//How to get the value of newSystemRec???
Int32 newSystemRec =
newSystemRec--;
Int32 index = newSystemRec;
switch (index)
{
case 1:
systemMode = SystemMode.Hydraulic;
cbSystem.SelectedIndex = 1;
break;
case 0:
default:
systemMode = SystemMode.Electrical;
cbSystem.SelectedIndex = 0;
break;
}
if (p2pMode == p2p.Trace)
tabP2Trace.TabVisible = true;
}
【问题讨论】:
-
了解如何实例化表单会有帮助。从那里可以更容易地提供帮助。
-
我现在看到了
mainForm的声明位置,但看不到它的实例化和显示位置。 -
我还应该提到我不太确定我是否理解您的设计。如果
mainForm是WordSearch的成员,那么当后者关闭时会发生什么?mainForm是否应该比包含表单的寿命更长?
标签: c# .net winforms parameter-passing