2013-05-31 120 views
0

我有一個表格MainForm,然後一個窗體Form1的函數,聲明如下:呼叫從另一種形式

namespace SdkDemo 
{ 
    public partial class MainForm : Form 
    {   
     public CoreWrapper _icCore;   
     private Dictionary<string, int> audioDevices; 

     #region MainForm Ctor 

     public MainForm() 
     { 
      InitializeComponent(); 
      _icCore.Start(); 
     } 

     public Form1 form1 = new Form1(); 
    } 
} 

所以Form1中只是使用Visual Studio工具創建的。

Form1的整個代碼:

namespace SdkDemo 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent();    
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string dial = Registry.CurrentUser.OpenSubKey("SOFTWARE").OpenSubKey("CS").GetValue("DIAL").ToString(); 

      // Error "An object reference is expected": 
      MainForm.txtSendKeys.Text = ("esdcze"); 
     }   
    } 
} 

的問題是,當我嘗試打電話東西「的MainForm」出現的對象引用錯誤。當然,txtSendKeys字段是公開的。

BTW,我可以輕鬆地做反向動作,就是像做

MainForm.textField = x 

從我的Form1上。

我嚴重缺乏有關C#的知識,但是這個人是我的工作,我現在開始絕望..

+0

什麼是改革? – Zigma

+0

您在Form1類中對MainForm的引用在哪裏? – KingCronus

+0

請參閱:http://stackoverflow.com/questions/6803970/access-form-component-from-another-class?rq=1 – KingCronus

回答

0

MainForm中是一種形式的定義,而不是它的一個實例。此外,您似乎並未在任何地方展示Form1,因此我現在已將其添加到MainForm.Load中,但顯然您可以移動它。

你需要更多的嘗試是這樣的:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent();    
    } 

    public MainForm MyParentForm { get; set; }  

    private void button1_Click(object sender, EventArgs e) 
    { 
     string dial = Registry.CurrentUser.OpenSubKey("SOFTWARE").OpenSubKey("CS").GetValue("DIAL").ToString(); 

     // Use the reference to MyParentForm 
     MyParentForm.txtSendKeys.Text = "esdcze"; 
    }   
} 

然後在您的主營:

public partial class MainForm : Form 
{   
    public CoreWrapper _icCore;   
    private Dictionary<string, int> audioDevices; 

    #region MainForm Ctor 

    public MainForm() 
    { 
     InitializeComponent(); 
     _icCore.Start(); 
    } 

    private void MainForm_Load(object sender, System.EventArgs e) 
    { 
     form1.MyParentForm = this; 
     form1.Show(); 
    } 

    public Form1 form1 = new Form1(); 
} 

這是確保您之前設置的「MyParentForm」屬性非常重要你在Form1中使用它。如果不是,Form1將會拋出異常。更聰明的方式可能涉及檢查財產不是第一次。

+0

謝謝你的幫助!然而,它引發了一個異常「對象引用沒有定義到對象實例」,當涉及到「MyParentForm.txtSendKeys.Text」行 –

+0

嗨,在設計器中,確保MainForm.cs的Load事件設置爲正確的方法。 – KingCronus

+0

花生價格!有用!在設計師中,我將「form1_load」放到「Load」事件中,並且它可以工作。多次感謝你! –

0

修改您MainForm類:

public partial class MainForm : Form 
{ 
    public CoreWrapper _icCore; 
    private Dictionary<string, int> audioDevices; 

    public MainForm() 
    { 
     InitializeComponent(); 
     _icCore.Start(); 
     // sets the form1's owner form to the MainForm instance 
     form1.Owner = this; 
     // show the Form1 form 
     form1.Show(); 
    } 

    public Form1 form1 = new Form1(); 

    internal void SetSendKeys(string value) 
    { 
     txtSendKeys.Text = value; 
    } 
} 

修改您Form1.button1_Click方法體:

private void button1_Click(object sender, EventArgs e) 
{ 
    string dial = Registry.CurrentUser.OpenSubKey("SOFTWARE").OpenSubKey("CS").GetValue("DIAL").ToString(); 
    var mainForm = (MainForm)this.Owner; 
    mainForm.SetSendKeys("esdcze"); 
}