winform中,根据输入框中的值来动态显示/隐藏特定控件

寒假因为疫情不能出去,在家闲着没事想破解下邻居WiFi又没有合适的字典,有些字典生成器功能是全面但有些需求无法实现,大一简单学了下C#,索性自己就用winform编写个字典生成器,但因为对winform了解的不是很透彻,难免会走很多弯路,接下来就把其中一个问题及其解决方案分享给大家,也算是给自己做个笔记。

需求

有一个需求是要根据用户在输入框中输入的值,来动态的显示/隐藏一定数量的单选按钮,单选按钮排列在panel框架中。如下图:
字典生成器

解决方案一

笨方法,不推荐
因为对winform并不是多精通,一开始想的是用switch来根据输入框中获取的值来一个一个改变单选按钮(RadioButton)的Visible属性,如下面代码所示:

private void text1_TextChanged(object sender, EventArgs e)
{
	int n;
	try
    	{
    		n = int.Parse(text1.Text);
    	}	
	catch
    	{
        	n = 0;
    	}
	switch(n)
	{
		case 1:
			RadioButtun1.Visible = true;
			RadioButtun2.Visible = false;
			RadioButtun3.Visible = false;
			...
			break;
		case 2:
			RadioButtun1.Visible = true;
			RadioButtun2.Visible = true;
			RadioButtun3.Visible = false;
			...
			break;
		...
	}
}

这样写的确可以满足需求,但是实在太笨了,并且我的界面里有13个单选按钮,每一种情况都要写大量的重复代码太费事费力,也不符合简洁、高效的编程思想,只是提供一种解决问题的思路。后来查阅资料后有了更加合理的解决方案,请看解决方案二。

解决方案二

查阅资料了解到了winform中的Control用法,可以批量控制窗体中的控件。
所以解决方法是:用Control来遍历panel中的所有单选按钮(RadioButtun),用一个变量i来获取RadioButtun中的Text内容,再通过一个if语句来控制哪些单选按钮显示,哪些需要隐藏。
最后代码如下:

private void text1_TextChanged(object sender, EventArgs e)
{
	int n,i;
	try
	{
    	n = int.Parse(text1.Text);
	}
	catch
	{
    	n = 0;
	}
	foreach (Control control in this.panel1.Controls)
	{
    	i = int.Parse(control.Text);
    	if (control is RadioButton)
    	{
        	if (i<=n)
        	{
            	control.Visible = true;
        	}
        	else
        	{
            	control.Visible = false;
        	}
    	}
	}
}

最后结果如下:
最终结果1
最终结果2
这样就用很简洁的代码实现了想要的功能,当然肯定还有其他的方法,大家也可以在下面讨论。

小记: 在将输入框中的字符串转换成int类型时,一定要用try对异常情况进行处理,否则当用户将输入框中的内容清空时VS会报错。

总结

在这个示例中,也可以通过改变代码来控制其他的控件或实现其他的功能。在大学里学到的知识毕竟有限,由于对各种语言学习的不透彻导致弯路不断,所以查阅资料的能力很关键,可以有效地帮助我们解决问题,当然编程最重要的还是多写多练,没有什么捷径。这也是我第一次在CSDN上写文章,难免会有不足之处,还请大家多多指教。最后祝大家新年快乐!身体健康!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值