2014-03-26 14 views
-3

我有2個表單。表單1是mainForm,表單2是WordSearch。我想將newSystemRec的值從WrodSearch傳遞給mainForm。我的兩個表單都可以訪問datalayer.cs文件。從WordSearch表單中我可以獲取我的newSystemRec值。 這是我的單詞搜索代碼:如何從C中的另一個表單獲取變量的值#

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); 
     } 
    } 

,這是我的MainForm:

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; 
    } 
+1

這裏有什麼幫助是要知道你如何實例化你的表單。從那裏可以更容易地提供幫助。 – Crono

+0

我現在可以看到'mainForm'是在哪裏聲明的,但沒有被實例化和顯示。 – Crono

+0

我還應該提到我不太清楚我是否瞭解您的設計。如果'mainForm'是'WordSearch'的成員,那麼當後者關閉時會發生什麼? 'mainForm'應該過時嗎? – Crono

回答

0

您的代碼不說明如何使用兩種形式被實例化,但基本上你可以做什麼是暴露值作爲表單的屬性並從其他表單訪問它。當然,爲了做到這一點,必須有其中兩種形式的實例是已知的情況下,使人們可以訪問其他:

public int NewSystemRec 
{ 
    get 
    { 
     // return value here 
    } 
} 
+0

如果您想要求帖子作者進一步澄清,您應該發表評論,而不是回答。 – Servy

+0

@Servy我實際上至少有一部分答案:將值作爲表單屬性公開。我相信這足以幫助我們做出迴應。至於最後一段我現在把它移到評論部分。 – Crono

+0

- 我添加了部分,它顯示了我的表單如何一起實例化 –

0

您可以在單詞搜索創建一個屬性,如:

private int newSystemRec; 

並配有房產訪問:

public int NewSystemRec 
{ 
    get 
    { 
     this.newSystemRec; 
    } 
} 

爲例:

MainForm mainForm = new mainForm() 
someControlOnForm1.Text = mainForm.NewSystemRec; 

您還可以使用構造函數:

public MainForm(int newSystemRecFromWordSearch) { 
int newSystemRec = id; 
} 

,並用它在單詞搜索

var form = new MainForm(newSystemRec); 

希望它能幫助!

相關問題