winforms 在Windows窗体窗体上取消自动选择文本框,Show()

qcuzuvrc  于 2023-03-13  发布在  Windows
关注(0)|答案(5)|浏览(200)

我有一个应用程序,我试图模仿的“软描述”文本框一样,这些发现的标签和标题的位置在这个网站上。
我这样做的方法基本上是创建我的文本框,并根据鼠标指针进入或离开控件时发生的情况,更新文本框的内容以获得效果。
问题是当我的表单第一次显示时,鼠标光标立即跳到第一个文本框中,这会删除告诉用户文本框用于什么的标题。
如果我关闭了文本框上的AcceptTab,那么一切都按预期工作,但是用户无法使用Tab键进入文本框。
有没有办法关闭文本框的自动选择?

w80xi6nr

w80xi6nr1#

你能把this.Focus()放在窗体本身上,还是放在某个标签控件上?

brqmpdu1

brqmpdu12#

有点晚了,但一个完美的解决方案是选择加载的形式。
将此行添加到构造函数将给予预期的结果。

this.Select();

但是在使用OpenFileDialog这样的多线程控件时,如果你想取消聚焦/取消选择文本框,Select()不起作用,所以我使用选择了窗体中的一个按钮。

button1.Select();
zbdgwd5y

zbdgwd5y3#

TabIndex属性控制选项卡的顺序,在加载时,焦点转到AcceptTab为true的第一个控件(按TabIndex排序)。您可以更改顺序,以便希望用户焦点开始的控件位于最低位置(并使选项卡按您所期望的方式在控件之间循环)。
或者,如Jason所建议的,您可以在FormLoad事件中简单地对任何控件或窗体本身调用Focus()。

wwtsj6pe

wwtsj6pe4#

我使用了Jason技术的一个变体。首先,我创建了一个tabindex为0的虚拟文本框。这样,当表单显示时,该文本框将被选中。接下来,我使虚拟文本框的宽度为零,这样它就没有可见的组件。
但是,一旦表单加载完毕,我不希望用户能够跳到“nonexistant”文本框,因此,我添加了以下两个部分:

//These functions prevent the textboxes from being implicitly selected.
    private void dummyBox_Leave(object sender, EventArgs e)
    {
        dummyBox.TabStop = false;
    }

    private void Main_Enter(object sender, EventArgs e)
    {
        dummyBox.TabStop = true;
        dummyBox.Select();
    }

其中Main是窗体的名称。
希望这能帮到什么人。
账单3

epfja78i

epfja78i5#

您可以通过设置窗体的ActiveControl属性来重写默认焦点。因此,如果您希望焦点位于“确定”按钮上而不是文本框上,请将

ActiveControl = OkButton;

在FormLoad事件处理程序中。(其中OkButton是要获得焦点的控件的ID)

相关问题