簡體   English   中英

如何使我的 Form Control 變量可以訪問我的 Form 類以外的類?

[英]How can I make my Form Control variables acessible to classes other than my Form class?

例如,在創建一個新的 Windows 窗體項目后,我有一個名為 Form1.cs 的類,從該窗體中,我可以簡單地開始鍵入窗體控件的名稱,它會自動填充窗體控件變量名稱,我可以在其中使用它們班上。 但是,我還有其他類也需要能夠訪問這些表單控制變量,但它們是不可訪問的。

如果它們將在另一個程序集中使用,則將它們設為公開,如果它們將在同一項目中使用,則將它們設為內部。 將它們設為靜態意味着您不必將 Form1 傳遞給其他類。

示例... 假設您的 Form1 有一個字符串,其中包含您在標題欄中顯示的文本。 使其成為內部靜態,如下所示:

internal static readonly string MsgBox_Title = " Best Application Evar!";

允許您從其他類訪問它,如下所示:

Form1.MsgBox_Title

它不必是只讀的; 這只是我從舊應用程序中提取的一個示例...

如果您不想要靜態變量,則必須傳入 Form1 的實例。

public class SomeClass
{
    private Form1 m_Form1;

    public SomeClass(Form1 form1)
    {
         m_Form1 = form1;
    }

    private void someMethod()
    {
       string localValue = m_Form1.SomeMemberStringVariable;
    }
}

這是一個非常人為的例子,但希望你能明白。

如果要從從 Form1 實例化的類中調用 Refresh 方法,可以使用子類中的事件來通知 Form1。

例子:

這個 Form1 有一個按鈕,我用來顯示輔助表單。

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

    private void btnShowPopup_Click(object sender, EventArgs e)
    {
        PopupForm f = new PopupForm();
        f.CallRefreshHandler += PopupForm_CallRefreshHandler;

        f.ShowDialog();
    }

    private void PopupForm_CallRefreshHandler(object sender, EventArgs e)
    {
        Refresh();
    }
}

輔助窗體“PopupForm”有一個按鈕,我用它來引發訂閱 Form1 的事件,並讓 Form1 知道調用 Refresh。

public partial class PopupForm : Form
{
    public event EventHandler CallRefreshHandler;

    public PopupForm()
    {
        InitializeComponent();
    }

    private void btnRaiseEvent_Click(object sender, EventArgs e)
    {
        EventHandler handler = CallRefreshHandler;

        if (handler != null)
        {
            handler(this, EventArgs.Empty);
        }
    }
}

希望這可以幫助。

創建該類的對象並開始使用這些變量

Form1 fm = new Form1();
string  abc = fm.VAR;

在表單中定義公共屬性。

public string MyProp { get; set; }

Form1 frm = new Form1();
frm.MyProp = "Value";

或者將屬性定義為靜態以避免必須實例化 Form1:

public static string MyProp { get; set; }

Form1.MyProp = "Value";

我最近遇到了這個問題。 我在一個單獨的類中保留了一些方法。 就我而言,可能不是一個好的設計決定,我還不確定。 而這些方法有時需要與主 Form1 中的控件進行通信。 例如,寫入 textBox1。

結果很容易。 只需編寫您的方法簽名以包含一個 TextBox 實例。 例如,您在將它稱為 tb 的方法中和內部傳遞 textBox1。 然后,當您調用該方法時(即使它在另一個類中),您將 tb.Text 屬性設置為您喜歡的任何值,它會顯示在 textBox1 上。

當您認為控件只是一種特殊的對象,以圖形方式表示在窗體中時,這是有道理的。 當您將它作為參數傳遞給另一個類或同一個類中的方法時,您實際上是在傳遞引用。 因此,在方法調用中向其寫入文本會將文本寫入原始控件。

暫無
暫無

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

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