如何得知textbox 已经滚动至哪一行

rryqsh 2007-12-06 10:56:37
想要实现一个类似于SQL2000里面的小功能
就是一开始文本框中的内容不全部显示,等滚动条被用户拉至最后几行时再加载下面的一块,如此重复至结束
我知道通过VScoll事件来获取滚动
可是不知道现在滚动到哪一行了,请各位高人帮忙
...全文
48 点赞 收藏 3
写回复
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-04-30
都是很好的建议! 值得学习
回复
AlexDemon 2007-12-07
通过向TextBox SendMessage可以获取当前显示第一行的Index,但是这个行包括WordWrap产生的软回车行。不仅仅是NewLine字符分割的硬回车行。
下面是简单的Code Sample。需要C#代码的话楼主可以给我一个邮箱。我发给你。
    
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

StringBuilder sb = new StringBuilder();

for (int i = 0; i < 100; i++)
{
sb.Append(string.Format("Index={0}\"!@#D!@E!@#@!X#!@#S!@S!@#!@#!@#S!@#!@#\"\r\n", i));
}

this.textBox1.Text = sb.ToString();
}

private void textBox1_MouseMove(object sender, MouseEventArgs e)
{
IntPtr lPResult = UnsafeNativeMethods.SendMessage(this.textBox1.Handle, NativeMethod.EM_GETFIRSTVISIBLELINE, IntPtr.Zero, IntPtr.Zero);

int lineNumber = lPResult.ToInt32();

this.Text = string.Format("FistVisibleLine:{0}", lineNumber);
}
}

[SuppressUnmanagedCodeSecurity]
internal static class UnsafeNativeMethods
{
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
}

internal static class NativeMethod
{
public const int EM_GETFIRSTVISIBLELINE = 0x00CE;
}
回复
hixiaosheng 2007-12-06
listbox里面对于item有索引值的吧,你判断item的索引值就可以了,textbox没这么用过。
回复
发动态
发帖子
组件/控件开发
创建于2007-09-28

8833

社区成员

.NET技术 组件/控件开发
申请成为版主
社区公告
暂无公告