C#,通过字符串获取控件以及给控件赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#,通过字符串获取控件以及给控件赋值相关的知识,希望对你有一定的参考价值。

已知控件的名称,控件的类型,控件的属性,控件的属性值,问题是,这些都是字符串类型的,举个例子,有个Button控件,他的名字叫“button1”。
我有4个字符串,分别是"Button","button1","Text","测试"
如何让系统找到button1的控件?(在窗体下,panel之类的无父容器)
如何将这个控件转换为Button类型?
如何将这个控件的Text属性赋值为“测试”?

给你写了个方法,你改一下就可以了

/// <summary>
///
/// </summary>
/// <param name="name">控件名,区分大小写</param>
/// <param name="attrbule">要设置的属性名,区分大小写</param>
/// <param name="value">值</param>
public void testMethod(string name, string attrbule, string value)

//循环某个窗口的所有控件,这里用当前窗体。
for (int i = 0; i < this.Controls.Count; i++)


//如果该控件的名字与指定的名字一致
if (this.Controls[i].Name == name)


//用放射取到指定的属性。属性名大小写必须一致
PropertyInfo pinfo = this.Controls[i].GetProperty(attrbule);

//判断是否找到属性
if (pinfo != null)

//使用反射设置值。
// Convert.ChangeType是将传进来的值转换为要设置
pinfo.SetValue(this.Controls[i], Convert.ChangeType(value, pinfo.PropertyType), null);



参考技术A foreach(Control ctrl in this.Controls)

if(ctrl is Button)

Button btn=ctrl as Button;
btn.Text="测试";


窗体有Controls属性。里面放的是自己所有子控件
当然如果你Button在窗体上的容器里,譬如Panel。那么先按这个方法去找Panel,然后再找Button
谢谢。追问

Text属性是字符串类型的
下次我传入"Enable",“False”
希望实现的就是 Enable赋值为False

另外,我是需要获取名字为"button1"的控件

追答

foreach(Control ctrl in this.Controls)

if(ctrl is Button)

Button btn=ctrl as Button;
if(btn.Name=="button1")
btn.Text="测试";

追问

Text是字符串,字符串,懂吗?如何让系统找到名字叫“Text”的属性?
“Button”传入的时候也是字符串类型,不是Control类型的

追答

private bool Set(string type,string name,string property,string provalue)

foreach(Control ctrl in this.Controls)

if (ctrl.Name == name)

PropertyInfo pinfo = ctrl.GetType().GetProperty(property);
if (pinfo != null)

pinfo.SetValue(ctrl, Convert.ChangeType(provalue, pinfo.PropertyType), null);
break;



参考技术B //先把控件找出来
Control col = this.Panel1.Controls.Find("button1", true)[0];
if (col != null)

//转换为Button类对象
Button btn = col as Button;
//定位到某个属性(prop_text是个字符串,比如"Text")
PropertyInfo pinfo = btn.GetProperty(prop_text);
//判断是否找到属性
if (pinfo != null)

// value是该属性需要设置的新值
pinfo.SetValue(btn, Convert.ChangeType(value, pinfo.PropertyType), null);

参考技术C string button="Button1";
foreach (Control c in this.form1.Controls)//循环所有控件

if (c.ID == button)//判断控件ID

Button btn = c as Button; //控件类型转换
btn.Text = "测试"; //控件赋值

参考技术D 用反射

怎么给easyui 时间控件赋值

1、 加入日期选择框“$("#dd").datebox("required":true);”

2、 javascript获取日期选择框的值,“$("#dd").datebox("getValue");  或者$("input[name='dd']").val();”

3、给它添加事件监听,datebox onSelect 日期选中后,自动为input id="dd" type="text"赋值,这样就可以使用“$("#dd").val()”获取选中的日期值了。

jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript,也不需要对css样式有深入的了解,开发者需要了解的只有一些简单的html标签。

参考技术A $("#TimeStart").datetimebox('setValue',startTime); 参考技术B   基本用法:
  1) 加入日期选择框
  $("#dd").datebox("required":true);

  2) javascript获取日期选择框的值
  $("#dd").datebox("getValue"); 或者$("input[name='dd']").val();

那么我们可以给它添加一个事件监听,在datebox onSelect 日期选中后,自动为input id="dd" type="text"赋值,然后我们就可以使用
  $("#dd").val()获取选中的日期值了。

  <script type="text/javascript">
$(document).ready(function()
$("#dd").datebox(
required:true,
onSelect: function(date)
$("#dd").val(date);

);
);
</script>

  3) javascript设置datebox的值
  $("#dd").datebox("setValue", "2012-01-01");
  例:添加编辑页面
  @Html.Hidden("hBirthDate", Model.BirthDate.ToString("yyyy-MM-dd"))

  $(document).ready(function ()

$("#BirthDate").datebox(
required: false,
formatter: function (date) return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate(); ,
parser: function (date) return new Date(Date.parse(date.replace(/-/g, "/"))); ,
onSelect: function (date)
$("#BirthDate").val(date);

);
//处理日期格式问题
if ($("#hBirthDate").val() != "" && $("#hBirthDate").val() != "0001-01-01")
$("#BirthDate").datebox("setValue", $("#hBirthDate").val());
else
$("#BirthDate").datebox("setValue", ((new Date()).getFullYear() - 25) + "-01-01");

);

  二、时间控件datetimebox
  用法和日期控件类似
  实现开始日期和结束日期的判断和赋值
  绑定脚本:

  <script type="text/javascript">
$(document).ready(function()
$("#StartDT").datetimebox(
required: false,
formatter: function (date)
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var hh = date.getHours();
var mm = date.getMinutes();
var ss = date.getSeconds();
return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d) + ' ' + (hh < 10 ? ('0' + hh) : hh) + ':' + (mm < 10 ? ('0' + mm) : mm) + ':' + (ss < 10 ? ('0' + ss) : ss);
,
parser: function (date) return new Date(Date.parse(date.replace(/-/g, "/"))); ,
onSelect: function (date)
$("#StartDT").val(date);
var startDate = date;
var endDate = $('#EndDT').val();
if ((new Date(startDate)).dateDiff(endDate) > 0)
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var hh = date.getHours();
var mm = date.getMinutes();
var ss = date.getSeconds();
var dateStr = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d) + ' ' + (hh < 10 ? ('0' + hh) : hh) + ':' + (mm < 10 ? ('0' + mm) : mm) + ':' + (ss < 10 ? ('0' + ss) : ss);
$("#EndDT").datetimebox('setValue', dateStr);


);
$("#EndDT").datetimebox(
required: false,
formatter: function (date)
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var hh = date.getHours();
var mm = date.getMinutes();
var ss = date.getSeconds();
return y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d) + ' ' + (hh < 10 ? ('0' + hh) : hh) + ':' + (mm < 10 ? ('0' + mm) : mm) + ':' + (ss < 10 ? ('0' + ss) : ss);
,
parser: function (date) return new Date(Date.parse(date.replace(/-/g, "/"))); ,
onSelect: function (date)
$("#EndDT").val(date);
var startDate = $("#StartDT").val();
var endDate = date;
if ((new Date(startDate)).dateDiff(endDate) > 0)
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var hh = date.getHours();
var mm = date.getMinutes();
var ss = date.getSeconds();
var dateStr = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d) + ' ' + (hh < 10 ? ('0' + hh) : hh) + ':' + (mm < 10 ? ('0' + mm) : mm) + ':' + (ss < 10 ? ('0' + ss) : ss);
$("#StartDT").datetimebox('setValue', dateStr);


);
//时间赋值
if ($("#ModelStartDT").val() != "")
$("#StartDT").datetimebox("setValue", $("#ModelStartDT").val());

if ($("#ModelEndDT").val() != "")
$("#EndDT").datetimebox("setValue", $("#ModelEndDT").val());


);
</script>

使用的自定义方法dateDiff
  可参考http://www.cnblogs.com/xcsn/p/5194822.html
  相关的时间验证

  jQuery.validator.addMethod("nowtime", function (value, element)
if (this.optional(element)) return true;
var assigntime = value;
var deadlinetime = new Date();
var reg = new RegExp('-', 'g');
assigntime = assigntime.replace(reg, '/');//正则替换
assigntime = new Date(parseInt(Date.parse(assigntime), 10));
deadlinetime = new Date(parseInt(Date.parse(deadlinetime), 10));
if (assigntime < deadlinetime)
return false;
else
return true;

, "不能小于当前时间!");

$.validator.addMethod("mintime", function (value, element, para)
if (this.optional(element)) return true;
var assigntime = value;
var deadlinetime = para;
var reg = new RegExp('-', 'g');
assigntime = assigntime.replace(reg, '/');//正则替换
deadlinetime = deadlinetime.replace(reg, '/');
assigntime = new Date(parseInt(Date.parse(assigntime), 10));
deadlinetime = new Date(parseInt(Date.parse(deadlinetime), 10));
if (assigntime < deadlinetime)
return false;
else
return true;

, "结束时间必须大于开始时间");
$.validator.addMethod("maxtime", function (value, element, para)
if (this.optional(element)) return true;
var assigntime = value;
var deadlinetime = para;
var reg = new RegExp('-', 'g');
assigntime = assigntime.replace(reg, '/');//正则替换
deadlinetime = deadlinetime.replace(reg, '/');
assigntime = new Date(parseInt(Date.parse(assigntime), 10));
deadlinetime = new Date(parseInt(Date.parse(deadlinetime), 10));
if (assigntime > deadlinetime)
return false;
else
return true;

, "开始时间必须小于结束时间");本回答被提问者采纳

以上是关于C#,通过字符串获取控件以及给控件赋值的主要内容,如果未能解决你的问题,请参考以下文章

C#窗体 webBrowser控件赋值后无法编辑~~~~~

C#怎么给动态生成的控件(Textbox)赋值。

如何在 C# Winforms 的下拉列表控件中获取数据源名称

c# 怎样实现点击TextBox弹出日历控件,并在点击日历某时间时赋值给TextBox

c#怎样实现点击textbox弹出日历控件并在点击日历某时间时赋值给textbox

winform 动态生成的控件 如何取值