我的问题很简单。我想单击Form1中的一个面板,这将导致userControl1中的label1放在form2上,以更改为“Text”。
单击此面板也会更改所述userControl1的背景颜色。我收到错误“'TileInterFaceTest.Usercontrol1.label1',因为它的保护级别”,这让我感到困惑。
即使单独运行换色代码,也无法达到预期的效果。
要说清楚,对于C#和一般的编程,我是一个新手。我一直在使用Visual Basic,所以类,方法和对象的概念对我来说有点混乱。
这是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TileInterFaceTest
{
public partial class Form1 : Form
{
public UserControl1 userControl1 = new UserControl1();
public Form2 form2 = new Form2();
public Form1()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
private void panel1_DoubleClick(object sender, EventArgs e)
{
}
private void panel1_Click(object sender, EventArgs e)
{
form2.Show();
userControl1.BackColor = System.Drawing.Color.Red;
userControl1.label1 = "Text";
}
}
}
答案 0 :(得分:1)
首先,您显示的代码甚至不会在第一张表单上显示用户控件!这可能就是为什么你的换色代码并没有像你预期的那样做。只需写下:
public UserControl1 userControl1 = new UserControl1();
只需声明一个公共字段(错误的样式!)并将其设置为用户控件的新实例。 它没有将它放在呈现的UI上。
要修复该部分,您需要将其添加到您的表单某处。在构造函数或Loaded
事件中说...:
Controls.Add(userControl1);
另请注意,这会将其置于Form1
。如果您需要Form2
,那么 表单需要创建控件并将其添加到其Controls
集合中,并将其作为属性公开(参见下文)。另一个问题是:
userControl1.label1 = "Text";
据推测,label1
是该用户控件的标签控件。首先,控件是用户控件的私有成员,你不能从其他地方访问它们而不首先暴露它们!您需要向用户控件添加以下内容:
public Label Label1 { get { return label1; } }
注意使用属性(正确的样式!)。现在你可以这样写:
userControl1.Label1.Text = "Text";
注意我修正了该行中的最终错误,因为您无法将Label
对象设置为字符串,它只是没有意义。您需要修改其Text
属性。