【问题标题】:Changing a forms font color from another form从另一个表单更改表单字体颜色
【发布时间】:2012-04-20 13:45:11
【问题描述】:

我有一个表单,我们称之为 formMain,它有一个菜单,可以打开另一个名为 formColors 的表单。 现在,当 formColors 打开时,它具有标有颜色的单选按钮,即红色

如何将 formMain 的字体颜色更改为我在 formColors 中选择的任何选项?

【问题讨论】:

    标签: c# forms colors fonts


    【解决方案1】:

    formColors 中创建一个Event 并在formMain 中订阅它,或者正如Hans Passant 指出的那样,您可以使用公共属性和表单DialogResult Property,这将是首选方式。

    WinForm DialogResult 示例

    Form1

    public partial class Form1 : Form
    {
        Form2 frm2;
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            frm2 = new Form2();
            if (frm2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                this.BackColor = frm2.formColor;
    
            frm2.Close();   
        }
    }
    

    Form2

    public partial class Form2 : Form
    {
        Color newColor;
        public Form2()
        {
            InitializeComponent();
        }
        public Color formColor
        {
            get { return this.newColor; }
            set { this.newColor = value; }
        }
    
        private void btnRed_Click(object sender, EventArgs e)
        {
            newColor = Color.Red;
        }
    
        private void btnBlue_Click(object sender, EventArgs e)
        {
            newColor = Color.Blue;
        }
    
        private void btnOk_Click(object sender, EventArgs e)
        {
            DialogResult = System.Windows.Forms.DialogResult.OK;
        } 
    
    }
    

    WinForm 事件示例:

    Form1:

    public partial class Form1 : Form
    {
        Form2 frm2 = new Form2();
        public Form1()
        {
            InitializeComponent();
            frm2.ColorEvent += new ColorEventHandler(frm2_ColorEvent);
    
        }
    
        void frm2_ColorEvent(object sender, ColorEventArgs e)
        {
            this.BackColor = e.formColor;
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            frm2.ShowDialog();
        }
    }
    

    Form2:

    public delegate void ColorEventHandler(object sender, ColorEventArgs e); 
    public partial class Form2 : Form
    {
        public event ColorEventHandler ColorEvent;
    
        public Form2()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            ColorEventArgs newColor = new ColorEventArgs();
            newColor.formColor=Color.Red;
            ColorEvent(this, newColor);
        }
    
    
    }
    

    ColorEventClass

    public class ColorEventArgs : EventArgs
    {
        private Color newColor;
        public Color formColor
        {
            get { return this.newColor; }
    
            set { this.newColor = value; }
        }
    }
    

    【讨论】:

    • 这是不正确的,当用户取消对话框时应该没有效果。
    • @HansPassant 对话框在取消时对父窗体没有影响,只有在点击按钮时才会引发新事件。
    • 所以如果用户点击按钮,然后取消它仍然改变的对话框。这不应该是一个事件,只是一个公共财产。如果 ShowDialog() 返回 DialogResult.Ok 然后使用该属性。
    • @HansPassant 这样会更容易,我将编辑答案以显示它,我只是想给出一个自定义事件的快速示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2019-07-15
    相关资源
    最近更新 更多