加载时基于 Combobox 索引的方法
Posted
技术标签:
【中文标题】加载时基于 Combobox 索引的方法【英文标题】:Method based on Combobox index at load 【发布时间】:2021-05-04 02:32:42 【问题描述】:我正在创建一种方法来管理我的应用 C#/VS2019 中的按钮位置。基本上,当我启动应用程序时,它应该搜索设置文件以读取各种设置,并通过这些设置来说明某些按钮的位置。简而言之,此设置是关于对齐按钮,就像您在文本中所做的那样(但我在表单上有按钮而不是行中的单词)。
该方法已经存在,通常您会使用组合框来设置属性(然后它也会存储在设置文件中,因此如果您重新启动应用程序,它已经设置好了)。如果我使用组合框,它工作得很好。相反,当我启动应用程序时,尽管值已被读取且正确,并且 Combobox 选择了正确的索引,但按钮根本不会移动。
我对应用语言也有类似的方法,它可以工作。这些是 2 的示例:
//TO CHANGE THE LANGUAGE IN FORM LOAD, SEARCH "Lingua:000" OR 001, righe IS string[] STORING ANY TEXT LINE OF THE FILE
for (int lindove = 0; lindove < righe.Length; lindove++)
string setlin = righe[lindove];
if (setlin.Contains("Lingua:") && setlin.Length == 10)
string cifre = "0123456789", contr = setlin.Substring(7, 3);
bool linguaok = true;
//CHECK WITHOUT ANY DOUBT contr IS AN INT NUMBER (0-9)
for (int i = 0; i < contr.Length; i++)
if (cifre.IndexOf(contr.Substring(i, 1)) == -1)
linguaok = false;
//IF IT IS INDEED INT NUMBER, LANG. COMBOBOX SET AND CHANGES LANGUAGE
if (linguaok == true)
if (Int32.Parse(contr) < lingue.Length) //lingue IS AN ARRAY OF LANGUAGES
linguacombo.SelectedIndex = Int32.Parse(contr);
else MessageBox.Show(BASICALLY, ERROR); caricalingua(0);
else MessageBox.Show(BASICALLY, ERROR); caricalingua(0);
break;
caricalingua
是一种基于该 int 值更改语言的方法。 0 表示它调用默认语言。下面我将以简单的方式解释它的作用,比较这两件事。相反,这是对齐部分,就在上面的部分之后(总是在 Form_Load 中)
//TO CHANGE ALIGNMENT IN FORM LOAD, SEARCH "Allineamento:0" OR 1/2/3/4, righe IS string[] STORING ANY TEXT LINE OF THE FILE
for (int alldove = 0; alldove < righe.Length; alldove++)
string setall = righe[alldove];
if (setall.Contains("Allineamento:") && setall.Length == 14)
string cifre = "01234", contr = setall.Substring(13, 1);
//IF THE CHAR FOUND IS A NUMBER IN cifre, GO TO COMBOBOX INDEX contr
if (cifre.Contains(contr))
allineamenti.SelectedIndex = Int32.Parse(contr);
else MessageBox.Show(BASICALLY, ERROR); allineametodo(0);
break;
allineametodo
是一种基于 Combobox 索引对齐按钮的方法。 0 表示它调用默认对齐方式。现在,这个和caricalingua
的区别只是前者只改变了Buttons的位置,后者主要改变了Buttons和Labels中的文字,但也因为文字的变化而改变了一些控件的位置。
我尝试直接从 Form_Load 中调用该方法,但没有奏效。如您所见,我刚刚为组合框设置了索引,但没有用。我尝试恢复两者(也许只适用于第一次,愚蠢的尝试,但谁知道呢?)和相同的结果。问题是,正如我所说,它实际上改变了索引,但按钮没有移动,而且正如我所说,如果我通过手动选择组合框或通过其他方式调用这两种方法(如状态为选择的按钮索引),它确实有效。起初我以为是因为我试图改变 Load 的一些位置,但后来意识到另一种方法也能做到,而且它确实有效,而且我过去已经做过,所以我不认为 Form_Load 是此事(我也尝试刷新表单和按钮)。你对此有什么想法吗?我知道还有其他方法可以解决这个问题,但我宁愿保持这种状态,并理解为什么该语言有效而对齐无效。
【问题讨论】:
【参考方案1】:表格显示顺序:
已创建控制句柄 控制 BindingContextChanged 表单加载 控制 VisibleChanged 表单已激活 表格显示Form _Load 事件在可见更改、激活和显示之前发生。在这些事件期间,您所做的设置更改可能会被覆盖。
尝试覆盖 Form.Shown 事件并在那里更改位置,看看它是否正常工作。如果它确实查看可能在 Activated 和 VisibleChanged 中覆盖的代码。
【讨论】:
以上是关于加载时基于 Combobox 索引的方法的主要内容,如果未能解决你的问题,请参考以下文章
winform 中如何得到combobox控件 Lord加载后 用户选择后 返回其选中的索引值
表单(上)EasyUI Form 表单EasyUI Validatebox 验证框EasyUI Combobox 组合框EasyUI Combo 组合EasyUI Combotree 组合树((代码片