C#:尝试更改usercontrol文本框和背景颜色

时间:2015-03-13 17:43:48

标签: c# winforms

我的问题很简单。我想单击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";
        }


    }
}

1 个答案:

答案 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属性。