C# 使用委托从另一窗体获取数据更新本窗体时内容显示空白如何解决?
您好,这是我第一次编写C#代码,有个问题想请教。
我的需求是在窗体Load事件中将获取到的输入内容显示在标签中,目前编写的代码如下:public DelegateText DelFirstName; public FrmConfirm() { InitializeComponent(); DelFirstName = new DelegateText(sic.GetFirstName); } private void FrmConfirm_Load(object sender, EventArgs e) { lblFirstName.Text = DelFirstName(sic.FirstName); }程序运行后标签仅显示空白内容,没有语法报错,我不清楚问题出在哪里,希望得到解答。
排查步骤及解决方案
- 先确认
sic.FirstName的赋值时序
窗体的Load事件是在窗体实例化完成后、显示前触发的,如果你是在创建FrmConfirm实例之后才给sic.FirstName赋值,那Load事件执行的时候这个属性还是空值,自然显示空白。你可以在给lblFirstName.Text赋值的行加断点,调试时查看sic.FirstName的实际值是否为空,即可定位这个问题。 - 检查委托绑定的逻辑合理性
你现在把委托绑定到了sic.GetFirstName方法,但调用时又传入了sic.FirstName作为参数。如果GetFirstName本身是无参、直接返回内部存储的姓名字段的方法,你传入参数反而可能触发预期外的逻辑,比如方法忽略传入的参数,直接返回还未赋值的内部变量。如果没有跨线程更新UI的需求,你完全没必要用委托,直接写lblFirstName.Text = sic.FirstName;或者lblFirstName.Text = sic.GetFirstName();即可。 - 确认标签控件本身配置正常
你可以在Load事件里加一行测试代码lblFirstName.Text = "测试文本";,如果运行后还是看不到内容,说明是标签本身的配置问题:比如Visible属性被设为false、字体颜色和窗体背景色相同、或者被其他控件遮挡,和赋值逻辑无关。
内容的提问来源于stack exchange,提问作者Zey Zey
相关产品推荐
相关产品推荐

