【问题标题】:Changing color to status bar将颜色更改为状态栏
【发布时间】:2012-03-22 11:45:43
【问题描述】:

好的,我还在学习这个... 我已经用谷歌搜索并做了一些研究,但没有找到我要找的东西。 我正在尝试添加一个状态栏,它在背景中显示当前颜色。无论用户如何更改背景颜色(上下文菜单、菜单栏、按钮),这都应该更新。

我已经添加了状态栏,但是当您单击带有颜色的按钮或使用上下文菜单时,我不太确定如何显示它。所以我必须进入每一个代码来改变或创建一个带有状态栏的公共类。

您可以在下面找到我打算做什么的图片:

如果您查看底部,它会显示红色背景,并且它也会突出显示为红色。当我点击蓝色或绿色时,我也需要它来改变。 实现这一目标的最佳方法是什么?

这是我来自toolstrip的代码:

 private void toolStripButton1_Click(object sender, EventArgs e)
    {
        this.BackColor = System.Drawing.Color.Red;
        
    }

    private void toolStripButton2_Click(object sender, EventArgs e)
    {
        this.BackColor = System.Drawing.Color.Green;
    }

    private void toolStripButton3_Click(object sender, EventArgs e)
    {
        this.BackColor = System.Drawing.Color.Blue;
    }

此代码来自我的上下文菜单:

 private void redToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        this.BackColor = System.Drawing.Color.Red;
    }

    private void greenToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        this.BackColor = System.Drawing.Color.Green;
    }

    private void blueToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        this.BackColor = System.Drawing.Color.Blue;
    }

我现在正在尝试找出状态栏。

编辑我弄清楚我必须做什么。我需要返回表单页面并编辑工具条。感谢大家的帮助。

【问题讨论】:

    标签: c# winforms controls


    【解决方案1】:

    让所有按钮使用相同的事件。然后检查发件人。如果您将 greenButton、blueButton 等标签分配给按钮,那么您可以使用:

    private void ColorButtons_Click(object sender, EventArgs e)
    {
        Control item = (Control)sender;
    
        if(item.tag == "greenColor")
            this.BackColor = Color.Green;
        else if(item.tag == "blueColor")
            this.BackColor = Color.Blue;
        // and so on
    }
    

    【讨论】:

    • 按钮在顶部,颜色已经在那里。那么我是否必须创建一个新的私人无效事件?
    • 我已经编辑了我的答案。再读一遍。将该代码添加到您的表单中,然后选择每个按钮并使用该事件。此外,在按钮名称中添加“greenButton,blueButton”等。
    • 我不会对此投反对票,但如果你必须为 20 种颜色做这个解决方案是不好的。而且名称在某种程度上应该是无关紧要的。也许使用控件的标签属性?甚至更好,只需选择它的背景颜色;)
    • @gbianchi:哦,是的。那好多了。我已经有一年没有使用 Windows 窗体了,所以我不记得了。修改了代码。
    • 在这种情况下避免使用名称的一种解决方案是采用按钮的背景颜色。这样,您确定它们会匹配:-)
    【解决方案2】:

    最好的解决方案是对主窗体的背景颜色变化做出反应。您可以通过处理 BackColorChanged 事件或覆盖主表单类中的 OnBackColorChanged 受保护方法来做到这一点。

    【讨论】:

      【解决方案3】:

      您可以使用一种方法来更改颜色,并在此方法中设置状态栏的文本和/或颜色。

      所以而不是设置(例如)

      this.BackColor = System.Drawing.Color.Blue;
      

      你会打电话给

      this.SetColor(System.Drawing.Color.Blue);
      

      SetColor(Color) 中,您处理文本更改。

      例如,您可以使用这种方法:

      private void SetColor(System.Drawing.Color c)
      {
          this.BackColor = c;
          this.toolStripStatusLabel1.Text = c.Name;
      }
      

      【讨论】:

        【解决方案4】:

        尽管您现在没有使用正确的方法(其他答案有更好的方法),但您可以轻松修复它。由于您想更改状态栏中控件的背景颜色,您可以在几个地方进行:

        您可以拥有一个接收颜色并据此更改控件的更改功能。在您的示例中,条形栏上的标签是红色的,您已经在设计器上更改了它。好吧,在运行时您可以使用代码执行相同的操作;)。标签有名字。只需添加一个类似这样的函数:

        private void ChangeColor(mycolor as System.Drawing.Color)
        {
            yourlabelcontrol.BackColor = mycolor;
            yourlabelcontrol.Text = mycolor.Name;
        }
        

        您也可以对每个更改颜色的操作执行此操作。

        你可以拥有一个改变一切颜色的功能(就像这个,但改变一切的颜色)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-16
          • 2015-03-05
          • 1970-01-01
          • 1970-01-01
          • 2017-02-22
          • 2016-10-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多