2017-03-11 112 views
0

我有改變所述主窗體上的文本框這就是文本的功能的主要形式的功能,代碼如下:調用從另一種形式的C#

主要形式功能:

public void consoleLog(string message) 
    { 
     txtConsoleLog.Text += Environment.NewLine; 
     txtConsoleLog.Text += message; 
     txtConsoleLog.SelectionStart = txtConsoleLog.TextLength; 
     txtConsoleLog.ScrollToCaret(); 
     txtConsoleLog.Refresh(); 
    } 

所以現在我打開一個FRM所謂的新形式連接當我點擊這樣的按鈕:

private void connectToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     Form frmConnect = new FrmConnect(this); 
     frmConnect.Show(); 
    } 

這是frmConnect低於

public partial class FrmConnect : Form 
{ 
    private Form mainForm; 

    public FrmConnect(Form frmMain) 
    { 
     this.mainForm = frmMain; 
     InitializeComponent(); 
    } 

    private void btnConnect_Click(object sender, EventArgs e) 
    { 
     FrmMain.Connected = true; 
     mainForm.consoleLog("Connected"); 
    } 
} 

所以,當我點擊一個按鈕,我想調用該函數,但它說它不包含它的定義,也即時試圖改變'連接'變量多數民衆贊成在主窗體的工作,只是參考FrmMain但我能做到這一點使用mainForm.Connected = true?

如果我改變功能的公共一成不變的,它會通過引用FrmMain工作,但後來我得到與txtConsoleLog錯誤,因爲我不能在非靜態方法或類似的東西引用的對象,任何幫助appriciated

回答

0

你應該改變

private Form mainForm; 

public FrmConnect(Form frmMain) 
{ 

private FrmMain mainForm; 

public FrmConnect(FrmMain frmMain) 
{ 

這將在後面給你訪問所有的公共財產上FrmMain在你的其他方法在FrmConnect類。

+0

現在它的意思是「不能將類型system.windows.Forms.Form轉換爲Project1.FrmMain,當我嘗試執行此操作時.mainForm = frmMain; –

+0

你確定你改變了這兩個點的類型嗎? –

+0

哎呀,現在我有,它的工作原理,謝謝 –

1

當您將表單傳遞給您的構造函數並將其作爲私有成員變量存儲時,在這兩個地方聲明它的基類型爲Form。爲了在您定義的類型上使用方法,您的參數和變量應該是FrmMain類型。

public partial class FrmConnect : Form 
{ 
    private FrmMain mainForm; 

    public FrmConnect(FrmMain frmMain) 
    { 
     this.mainForm = frmMain; 
     InitializeComponent(); 
    } 

    private void btnConnect_Click(object sender, EventArgs e) 
    { 
     FrmMain.Connected = true; 
     mainForm.consoleLog("Connected"); 
    } 
} 
+0

現在它的意思是「不能將類型system.windows.Forms.Form轉換爲Project1.FrmMain,當我嘗試這樣做時.mainForm = frmMain; –

+0

像這樣在兩個位置都更改它,你的'private Form mainForm;' – krillgar