微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

加载时基于 Combobox 索引的方法

如何解决加载时基于 Combobox 索引的方法

我正在创建一个方法来管理我的应用程序中的按钮位置,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 是一种基于组合框索引对齐按钮的方法。 0 表示它调用认对齐方式。现在,这与caricalingua的区别仅在于前者只改变了Buttons的位置,后者主要改变了Buttons和Labels中的文本,但也因单词的变化而改变了一些控件的位置。

我尝试直接从 Form_Load 调用方法,但没有奏效。如您所见,我只是为 ComboBox 设置了索引,但没有用。我尝试恢复这两个(也许只适用于第一个愚蠢的尝试,但谁知道呢?)和相同的结果。问题是,正如我所说,它实际上改变了索引,但按钮没有移动,而且正如我所说,如果我通过手动选择组合框或以其他方式调用这两种方法(如声明选择的按钮)一个索引),它确实有效。起初我认为这是因为我试图改变 Load 的一些位置,但后来意识到另一种方法也能做到,而且确实有效,而且我过去已经做过,所以我不认为 Form_Load 是此事(我也尝试刷新表单和按钮)。你对此有什么想法吗?我知道还有其他方法可以解决这个问题,但我宁愿保持这种状态并理解为什么语言有效而对齐无效。

解决方法

显示表单的顺序:

  • 控制句柄创建
  • 控制 BindingContextChanged
  • 表单加载
  • 控制 VisibleChanged
  • 表单已激活
  • 显示的表格

Form _Load 事件发生在可见更改、激活和显示之前。在这些事件期间,您所做的设置更改很可能会被覆盖。

尝试覆盖 Form.Shown 事件并在那里更改位置,看看它是否正常工作。如果它确实查看了可能在 Activated 和 VisibleChanged 中覆盖的代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。