例如,在创建一个新的Windows窗体项目后,我有一个名为Form1.cs的类,从该窗体我可以简单地开始键入窗体控件的名称,它将自动填充窗体控件变量名称,我能够在课堂上使用它们。但是,我还有其他类需要能够访问这些表单控件变量,但它们无法访问。
答案 0 :(得分:2)
如果要在其他程序集中使用它们,则将它们公开;如果要在同一项目中使用它们,则将其公开。将它们设置为静态意味着您不必将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);
}
}
}
希望这有帮助。
答案 1 :(得分:1)
创建该类的对象&开始使用像这样的变量
{{1}}
答案 2 :(得分:1)
在表单中定义公共属性。
public string MyProp { get; set; }
Form1 frm = new Form1();
frm.MyProp = "Value";
或者将属性定义为static,以避免必须实例化Form1:
public static string MyProp { get; set; }
Form1.MyProp = "Value";
答案 3 :(得分:1)
我最近遇到过这个问题。我在一个单独的类中保留了一些方法。在我的情况下,也许不是一个好的设计决定,我还不确定。这些方法有时需要与主Form1中的控件进行通信。例如,要写入textBox1。
结果很简单。只需编写方法签名以包含TextBox实例。例如,您将方法中的textBox1传递给方法,并将其称为tb。然后,当您调用该方法时(即使它在另一个类中),您将tb.Text属性设置为您喜欢的任何属性,它将显示在textBox1上。
当您认为控件只是一种特殊的对象时,这是有道理的,在表单中以图形方式表示。当您将它作为参数传递给另一个类或同一个类中的方法时,实际上是在传递引用。因此,在方法调用中将文本写入其中会将文本写入原始控件。