簡體   English   中英

如何從C#中的其他表單訪問可視組件

[英]How to access a visual component from another form in c#

我的主窗體中有一個文本框。

現在,我創建了一個函數,用於設置文本框的值。

public void SetTextOfTextBox(String text)
{
  textbox1.text = text;
}

現在,以我的主要形式,我叫另一個類(b類),它為我做了一些工作。 現在,我希望能夠從類b調用我的setTextofTextBox函數。

現在,如果我嘗試Form1.SetTextOfTextBox("test"); 這行不通。 我究竟做錯了什么?

如何從另一個類訪問aa Form的組件。

Form1.SetTextOfTextBox(“ test”); 這不起作用

這不起作用,因為SetTextOfTextBox不是靜態的,並且您不能直接訪問非靜態的函數。 而且您也不能使其靜態,因為您的文本框是表單級控件。

如何從另一個類訪問aa Form的組件

您必須將Form1的實例傳遞給其他類才能訪問它。 就像是

  Class B = new ClassB(this);  //where this is the instance of Form1.

您將需要對類b中的Form1實例的引用,否則您將無法調用成員方法。

像這樣:

class Form1 : System.Windows.Forms.Form {
    void functionInForm1() {
        ClassB objB = new ClassB();
        objB.doSomething(this);
    }
}

class ClassB {
    void doSomething(Form1 form) {
        form.SetTextOfTextBox("test");
    }   
}

找出 Form1並調用方法:

  foreach (var form in Application.OpenForms) {
    Form1 myForm = form as Form1;

    if (!Object.ReferenceEquals(null, myForm)) {
      myForm.SetTextOfTextBox("Test");

      break;
    }
  }

您是否嘗試使用委托。

像這樣在ClassB中指定委托。

public delegate void OnDone(string textValue);
public event OnDone OnUserDone;

在ClassB通話事件中完成任務后:

OnUserDone("DoneClassB");

當您在表單映射委托函數中創建類的對象時。

 Classb b=new Classb();
 b.OnUserDone += new Classb.OnUsrControlDone(CompletedClasss);

以如下形式定義函數。

void CompletedClasss(string textValue)
{
            SetTextOfTextBox( textValue);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM