【问题标题】:How to dynamically position a listbox in relation to textbox in winforms如何在winforms中相对于文本框动态定位列表框
【发布时间】:2014-07-08 08:18:03
【问题描述】:

我目前正在使用 winforms 编写网格。我有多个文本框,每个文本框都组成了单元格。当我单击要显示列表框的单元格时(它是我之前通过设计器添加的单个预定义列表框,因此每个单元格都有相同的列表框)。

现在我的问题是如何将列表框定位在文本框下方?

我需要使用的事件我已经知道(因为我在那里使用框架,所以我需要在那里使用事件并且已经知道可以使列表框可见和不可见的适当事件)。 我有事件中当前文本框的处理程序。我的问题是我不确定 我如何使用这些信息来定位列表框本身。

那么我需要使用哪些命令来定位列表框?

【问题讨论】:

  • 为你的Textboxes所有创建一个普通Enter事件。把这段代码放进去:TextBox tb = (TextBox) sender; listBox1.Location = new Point(tb.Left, tb.Top + tb.Height + 5)

标签: c# winforms


【解决方案1】:

将所有文本框添加到进入和离开事件
使用发件人使其适用于所有文本框。

TextBox TextB = (TextBox)sender;"

然后使用文本框位置 X 和 Y 来设置列表框。
您需要将文本框的高度和您希望它在文本框下方的空间添加到 Y。

"listBox1.Location = new Point(TextB.Location.X, TextB.Location.Y + TextB.Height + 5);"

使用下面的代码就可以了

    private void textBox1_Enter(object sender, EventArgs e)
    {
        TextBox TextB = (TextBox)sender;

        listBox1.Location = new Point(TextB.Location.X, TextB.Location.Y + TextB.Height + 5);
        listBox1.Visible = true;
    }

    private void textBox1_Leave(object sender, EventArgs e)
    {
        listBox1.Visible = false;
    }

【讨论】:

  • 是否还有一种好方法来决定何时在文本框下方或上方显示它? (与此相关:我必须将它定位在左侧 8 px(x 为 -8),以便它直接在 TextBox 下方开始,任何线索为什么会出现这种情况?
  • 对于 x-8,我不知道为什么会这样。但是如果你需要给 x-8 并且你的问题已经解决了,它就解决了:)。对于您何时在下方或上方显示它的问题,您的意思是什么?列表框何时离开屏幕?
  • 完全正确。因此,如果在其中创建列表框的行在屏幕上的位置太低,以至于列表只会部分显示而不是完全显示
  • 也许最好问一个新问题,并解释一下你的表格。它可以滚动等等。我让它在固定窗口上工作,但不知道它是否能工作你可以滚动。
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 2011-12-29
  • 1970-01-01
  • 2018-01-11
  • 2017-06-24
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
相关资源
最近更新 更多