![](/img/trans.png)
[英]Unity c# - How can I make it so that I can access all my other classes, variables and methods via a single class?
[英]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.