C# 如何仅使用一个按钮进行此操作?

C# 如何仅使用一个按钮进行此操作?,c#,.net,button,C#,.net,Button,好的,我正在尝试练习我的windows窗体技能,我一直在想一件简单的事情,比如制作一个显示“显示消息”的按钮,当你点击它时,它会使一个不可见的标签可见,上面写着“嘿,伙计”,按钮的文本应该改为“隐藏消息” 单击时,标签应再次不可见。我试着用if语句做了一段时间,但没有真正弄明白,所以我只使用了两个按钮,这使它简单了一百万倍。我只是在想,我怎么能只用一个按钮呢 我的代码: public partial class Form1 : Form { public Form1()

好的,我正在尝试练习我的windows窗体技能,我一直在想一件简单的事情,比如制作一个显示“显示消息”的按钮,当你点击它时,它会使一个不可见的标签可见,上面写着“嘿,伙计”,按钮的文本应该改为“隐藏消息”

单击时,标签应再次不可见。我试着用if语句做了一段时间,但没有真正弄明白,所以我只使用了两个按钮,这使它简单了一百万倍。我只是在想,我怎么能只用一个按钮呢

我的代码:

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

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void btnShow_Click(object sender, EventArgs e)
        {
            lblShow.Visible = true;
            btnShow.Visible = false;
            btnHide.Visible = true;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnHide_Click(object sender, EventArgs e)
        {
            lblShow.Visible = false;
            btnShow.Visible = true;
            btnHide.Visible = false;
        }
    }
}

可以使用一种方法进行重构以设置标签可见性,如下所示:

private void btnToggle_Click(object sender, EventArgs e)
{
  lblShow.Visible = !lblShow.Visible;
  btnToggle.Text = lblShow.Visible ? "Hide Message" : "Show Message";
}
使用VS Form Desiner,可以将label Visible属性设置为true,将按钮文本设置为nothing

在FormLoad事件中,调用方法来设置:

btnToggle_Click(this, null);

可以使用一种方法进行重构以设置标签可见性,如下所示:

private void btnToggle_Click(object sender, EventArgs e)
{
  lblShow.Visible = !lblShow.Visible;
  btnToggle.Text = lblShow.Visible ? "Hide Message" : "Show Message";
}
使用VS Form Desiner,可以将label Visible属性设置为true,将按钮文本设置为nothing

在FormLoad事件中,调用方法来设置:

btnToggle_Click(this, null);

您可以向类中添加bool,并在单击按钮时更改bool

bool showLabel = true;

private void btnToggle_Click(object sender, EventArgs e)
{
    if (showLabel)
    {
        lblShow.Visible = true;
    }
    else
    {
        lblShow.Visible = false;
    }
    showLabel = !showLabel;
}

您可以向类中添加bool,并在单击按钮时更改bool

bool showLabel = true;

private void btnToggle_Click(object sender, EventArgs e)
{
    if (showLabel)
    {
        lblShow.Visible = true;
    }
    else
    {
        lblShow.Visible = false;
    }
    showLabel = !showLabel;
}

我建议保留一个状态变量,并根据状态变量的值更新表单。这是一种灵活的模式,您可以适应多个状态,这意味着您可以拥有产生不同结果的按钮组合

试试这个:

public partial class Form1 : Form
{
    public enum FormState
    {
        MessageHidden,
        MessageVisible,
        Default = MessageHidden
    }

    FormState state = FormState.Default;
    public Form1()
    {
        InitializeComponent();
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        UpdateUI();
    }
    protected void UpdateUI()
    {
        switch (state)
        {
            case FormState.MessageHidden:
                label1.Visible = false;
                button1.Text = "Show Message";
                break;
            case FormState.MessageVisible:
                label1.Visible = true;
                button1.Text = "Hide Message";
                break;
            default:
                throw new NotImplementedException();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        switch (state)
        {
            case FormState.MessageHidden:
                state = FormState.MessageVisible;
                break;
            case FormState.MessageVisible:
                state = FormState.MessageHidden;
                break;
            default:
                throw new NotImplementedException();
        }
        UpdateUI();
    }
}
示例屏幕截图

  • FormState.MessageHidden

  • FormState.MessageVisible

我建议保留一个状态变量,并根据状态变量的值更新表单。这是一种灵活的模式,您可以适应多个状态,这意味着您可以拥有产生不同结果的按钮组合

试试这个:

public partial class Form1 : Form
{
    public enum FormState
    {
        MessageHidden,
        MessageVisible,
        Default = MessageHidden
    }

    FormState state = FormState.Default;
    public Form1()
    {
        InitializeComponent();
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        UpdateUI();
    }
    protected void UpdateUI()
    {
        switch (state)
        {
            case FormState.MessageHidden:
                label1.Visible = false;
                button1.Text = "Show Message";
                break;
            case FormState.MessageVisible:
                label1.Visible = true;
                button1.Text = "Hide Message";
                break;
            default:
                throw new NotImplementedException();
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        switch (state)
        {
            case FormState.MessageHidden:
                state = FormState.MessageVisible;
                break;
            case FormState.MessageVisible:
                state = FormState.MessageHidden;
                break;
            default:
                throw new NotImplementedException();
        }
        UpdateUI();
    }
}
示例屏幕截图

  • FormState.MessageHidden

  • FormState.MessageVisible

这只需两行代码即可完成:

private void btnToggle_Click(object sender, EventArgs e)
{
    lblShow.Visible = !lblShow.Visible;
    btnToggle.Text = lblShow.Visible ? "Hide Message" : "Show Message";
}
从技术上讲,它可以在一行中完成,但我认为它的可读性较差:

btnToggle.Text = (lblShow.Visible = !lblShow.Visible) ? "Hide Message" : "Show Message";

这只需两行代码即可完成:

private void btnToggle_Click(object sender, EventArgs e)
{
    lblShow.Visible = !lblShow.Visible;
    btnToggle.Text = lblShow.Visible ? "Hide Message" : "Show Message";
}
从技术上讲,它可以在一行中完成,但我认为它的可读性较差:

btnToggle.Text = (lblShow.Visible = !lblShow.Visible) ? "Hide Message" : "Show Message";

向类中添加bool变量并按如下方式切换值:向类中添加bool变量并按如下方式切换值: