就是这样。这是一个愚蠢的(令人尴尬的!)问题,但我以前从未使用过C#,只有C ++,我似乎无法弄清楚如何从辅助表单访问主表单上的Label并更改文本。如果有人能让我快速了解该怎么做我会非常感激!
顺便说一句,我应该澄清一下。对不起:我有两个单独的.cs文件,每个文件看起来如下所示。我在VS2008中使用[Designer]在Form1中添加标签。当我输入类似Form1.label1的东西时,它不明白。下拉列表显示了Form1的方法和属性列表,但是只有大约7个,比如ControlCollection,Equals,MouseButtons和其他几个...我可以在Form1中公开定义一个变量并显示,但我不知道如何访问标签...namespace AnotherProgram
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
答案 0 :(得分:4)
您需要对Form1实例的引用 - 例如,如果它是构造Form2的Form1,您可以将this
作为构造函数参数传递。
然后,您需要通过属性(或 - ick! - 非私有字段)公开Form1的标签,或者编写一个方法/属性来设置标签的文本。例如:
public class Form1 : Form
{
private Label label;
// Construction etc as normal
public string LabelText
{
get { return label.Text; }
set { label.Text = value; }
}
public Form2 CreateForm2()
{
return new Form2(this);
}
}
public class Form2 : Form
{
private Form1 form1;
public Form2(Form1 form1)
{
this.form1 = form1;
// Normal construction
}
public void SayHello()
{
form1.LabelText = "Hello";
}
}
答案 1 :(得分:0)
您必须从Form2引用Form1。然后,您需要Form2可见的Form 1上的方法或属性,将标签文本更改为“Hello”。
答案 2 :(得分:0)
Public Class Form1 Inherits Form Friend label1 As New Label Public Sub openForm2() Dim f As New Form2(Me) f.Show() End Sub End Class Public Class Form2 Inherits Form Private _ref As Form1 Public Sub New() _ref = Nothing End Sub Public Sub New(ByVal formRef As Form1) _ref = formRef End Sub Public Sub accessLabel(ByVal setText As String) If (_ref IsNot Nothing) Then _ref.label1.Text = setText Else Throw New NullReferenceException("_ref is NULL") End If End Sub End Class
答案 3 :(得分:0)
我认为代表是最强大的选择,除了在表单中具有属性:http://www.c-sharpcorner.com/UploadFile/mosessaur/winformsdelegates09042006094826AM/winformsdelegates.aspx
在第二种形式中我定义:
public delegate void AddItemDelegate(string item);
public AddItemDelegate AddItemCallback;
从打开它的表格我写道:
private void btnScenario2_Click(object sender, EventArgs e)
{
FrmDialog dlg = new FrmDialog();
//Subscribe this form for callback
dlg.AddItemCallback = new AddItemDelegate(this.AddItemCallbackFn);
dlg.ShowDialog();
}
private void AddItemCallbackFn(string item)
{
lstBx.Items.Add(item);
}