C#切换用户控件时按钮状态重置问题求助
用户控件切换后按钮状态重置的解决办法
问题根源
切换用户控件时,要么是控件被重新创建了新实例,要么是控件加载时没恢复之前的状态,导致按钮回到初始的启用/禁用状态。
具体解决步骤
1. 加个变量存状态
在你的用户控件类里加个私有变量,用来记录当前是否处于运行状态:
private bool _isRunning = false;
2. 改点击事件,同步状态变量
把原来的按钮点击事件改成下面这样,同时更新状态变量,还把按钮状态更新的逻辑抽成单独方法,避免重复代码:
private void Start_Click(object sender, EventArgs e) { Some_Function(); _isRunning = true; UpdateButtonStates(); } private void btnStopServer_Click(object sender, EventArgs e) { Some_Function(); _isRunning = false; UpdateButtonStates(); } private void UpdateButtonStates() { Start.Enabled = !_isRunning; Stop.Enabled = _isRunning; }
3. 控件加载时恢复状态
重写控件的OnLoad方法,或者在Load事件里调用状态更新方法,保证控件加载时按钮状态是对的:
protected override void OnLoad(EventArgs e) { base.OnLoad(e); UpdateButtonStates(); }
特殊情况处理
如果切换控件时每次都要新建用户控件实例,那上面的私有变量就没用了——新实例的变量会重置。这种情况得把状态存在父容器、全局单例类或者静态变量里,比如父窗体的属性,这样切换时能拿到之前的状态。另外也可以改切换逻辑,复用同一个用户控件实例,不用每次都new。
内容的提问来源于stack exchange,提问作者shayan ghezelbash
相关产品推荐
相关产品推荐

