【问题标题】:how to access winform components from another class?如何从另一个类访问 winform 组件?
【发布时间】:2012-10-25 08:48:26
【问题描述】:

我有一个带有一个按钮和两个标签的表单

我有一个名为 myCounter 的单独类

我希望 myCounter 类能够访问表单中的标签 通过一个名为 changeColor..的方法。

如何使标签在此类中可用

形式

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public Color colTurn
        {
            get { return lblp1Turn.BackColor; }
            set { lblp1Turn.BackColor = value; }
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }

类

class myCounter
{
    private readonly Form1 Board;
    public myCounter(Form1 Board)
    {
        this.Board = Board;
    }

    public int turn = 0;


    public void changeColor()
    {

        if (turn == 0)
        {
            turn = 1;
            lbl

           //change color code here
        }
    }
}

【问题讨论】:

  • 我试过get和set
  • 你能展示你试过的代码吗?
  • 您是否尝试过将这些物品传递给您的第二堂课?
  • @Jon B 你对我的问题做了什么
  • @Tacit - 我修复了一个小的代码格式问题,使您的问题更易于阅读。请不要冒犯。这是 Stack Overflow 工作原理的一部分。

标签: c# .net winforms visual-studio-2010 class


【解决方案1】:

所以看起来你无论如何都要将整个表格传递给你的第二堂课,所以我会按照 LightStriker 的建议去做。为您的所有项目创建一个公共访问器,然后在您的其他类中设置它。

public partial class Form1 : Form
    {
        private myCounter _counterClass;
        public Form1()
        {
            InitializeComponent();
        }

        public Label MyLabel1
        {
            get {return mylabel1;}
        }

        public Label MyLabel2
        {
            get {return mylabel2;}
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            _counterClass = new myCounter(this);
        }

        protected void ButtonClick(object sender, EventArgs e)
        {
            _counterClass.changeColor();
        }
    }

然后在您的第二堂课中,您可以访问您的标签。

class myCounter
{
    private readonly Form1 Board;
    public myCounter(Form1 Board)
    {
        this.Board = Board;
    }

    public int turn = 0;


    public void changeColor()
    {

        if (turn == 0)
        {
            turn = 1;
            Board.MyLabel1.BackColor = Color.Red;
            Board.MyLabel2.BackColor = Color.White;
        }
        else
        {
            turn = 0;
            Board.MyLabel2.BackColor = Color.Yellow;
            Board.MyLabel1.BackColor = Color.White;
        }
    }
}

请记住,这是我在 wiki 标记编辑器中编写的代码,未经测试。不过,这应该对你有用。

【讨论】:

  • 无论您要更改什么属性。你想改变 BackColor 对吗?
  • 你能告诉我是什么调用了 changeColor 方法吗?
  • 它将是表单类中的一个按钮.. 我需要 myCounter 类的实例还是如何调用此方法
  • 好的,那么假设您在 formLoad 中创建并持有一个 myCounterClass,则此代码应该在第一个按钮单击时起作用。除了 changeColor 方法之外,还有什么设置 Turn 吗?
  • 我不确定我是否完全理解您要完成的工作。您能告诉我您希望代码以最基本的形式做什么吗?
【解决方案2】:

为此在您的表单上创建一个公共方法。

public partial class Form1 : Form{
    public void SetLabelColor(Color color){
        mylabel.BackColor = color;
    }
    //... Other code
}

【讨论】:

  • 那么我如何使标签在课堂上可用
  • 以及为什么你使用部分类
  • @Tacit:它只是从你的代码中复制而来。部分类是因为它是一个表单,并且您正在使用 .designer.cs 文件和代码隐藏 cs 文件。
  • @Tacit:另外,“使标签可用”没有任何意义。你声明你想暴露标签的颜色,这正是 Oscar 在这里通过使用类中的方法提供的。
  • 我可以用类中的方法来做,但我想在表单类之外做所有事情
猜你喜欢
  • 2011-08-04
  • 2012-09-02
  • 1970-01-01
  • 2012-09-07
  • 2014-04-06
  • 1970-01-01
  • 2020-11-30
  • 2018-06-27
相关资源
最近更新 更多