C# 如何在winforms中相对于textbox动态定位列表框

C# 如何在winforms中相对于textbox动态定位列表框,c#,winforms,C#,Winforms,我目前正在用winforms编程一个网格。我有多个文本框,每个文本框组成了单元格。当我点击单元格时,我想显示一个列表框(它是我之前通过设计器添加的一个预定义列表框,因此每个单元格都有相同的列表框) 现在我的问题是如何将列表框定位在文本框下 我需要使用的事件我已经知道了(因为我在那里使用一个框架,我需要使用那里的事件,并且已经知道可以使列表框可见和不可见的适当事件)。 我有事件中当前文本框的处理程序。我的问题是我不确定 如何使用这些信息定位列表框本身 因此,我需要使用哪些命令来定位列表框?将所有文

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

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

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


因此,我需要使用哪些命令来定位列表框?

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

TextBox TextB=(TextBox)发送方;"

然后使用文本框位置X和Y设置列表框。
您需要在Y轴上添加文本框的高度以及您希望文本框下方的空间。

“listBox1.Location=新点(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;
    }

为所有的
文本框创建一个公共
输入
事件。将此代码放入其中:
文本框tb=(文本框)发送者;listBox1.Location=新点(tb.Left,tb.Top+tb.Height+5)
是否有一个好方法来决定何时在文本框下方或上方显示它?(与此相关的是:我必须把它放在左边8px(-8代表x)的位置,这样它就从文本框的正下方开始。有什么线索可以解释为什么会这样吗?对于x-8,我不知道为什么会这样。但是如果你需要给x-8,你的问题就解决了,它就解决了:).对于你的问题是什么时候在下方或上方显示它,你的意思是什么?当列表框离开屏幕时?没错。因此,如果创建列表框的行在屏幕上的位置太低,以至于列表只能部分显示而不是全部显示,那么我们最好为此提出一个新问题,并对其进行一些解释你是表单。它可以滚动等等。我有一个固定的窗口,但不知道如果你可以滚动它是否会工作。