关于ScrollBar,AutoScroll(滚动条)

isleepy 2003-09-24 11:34:01
我在窗口中放一个控件,
然后设置窗口的AutoScroll属性为true,
这时窗口可以根据控件的大小自动出现滚动条,
问题是当我下拉或右移滚动条,然后切换至其他窗口,
在次激活的时候滚动条总会自动复位,
而不能保持当前位置,
苦恼中。。。
...全文
475 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
brightheroes 2003-09-24
  • 打赏
  • 举报
回复
楼上的很有道理呀
isleepy 2003-09-24
  • 打赏
  • 举报
回复
哎,激活就是activate or GotFocus,不是什么打开不打开
还是做一个例子给你们看看就明白了
jjcccc 2003-09-24
  • 打赏
  • 举报
回复
打错字,重发:

哦,我知道是什么原因。那时因为你在离开窗体前,窗体的焦点控件在窗体的可见区域以外(或部分在窗体以外),所以等你再切换回该窗体时,就会自动滚动以让你的焦点可见显示出来。你可以在Activated事件加上一句代码,假设你窗体最上部有个TextBox控件:textBox1;

textBox1.Focus();

然后你再切换试试,每次窗体激活时就会自动滚动到上部,保证textBox1完整显示出来。
jjcccc 2003-09-24
  • 打赏
  • 举报
回复
哦,我知道是什么原因。那时因为你在离开窗体前,窗体的焦点控件在窗体的可见区域以外(或部分以外),右移等你再切换回该窗体时,机会自动滚动以让你的焦点可见显示出来。你可以在Activated事件加上一句代码,记假设你窗体最上不有个TextBox:textBox1;

textBox1.Focus();

然后你再切换试试,每次窗体激活时就会自动滚动到上部,保证textBox1完整显示出来。
asam2183 2003-09-24
  • 打赏
  • 举报
回复
aspx.cs:
if (Request["__SCROLLPOS"] != null &&
Request["__SCROLLPOS"] != String.Empty)
{
int pos = Convert.ToInt32 (Request["__SCROLLPOS"]);
Response.Write ("<body id=\"theBody\" " +
"onscroll=\"javascript:document.forms[0].__SCROLLPOS.value = " +
"theBody.scrollTop;\" " +
"onload=\"javascript:theBody.scrollTop=" + pos + ";\">");
}
else
{
Response.Write ("<body id=\"theBody\" " +
"onscroll=\"javascript:document.forms[0].__SCROLLPOS.value =" +
"theBody.scrollTop;\">");
}
aspx:
<input type="hidden" name="__SCROLLPOS">
brightheroes 2003-09-24
  • 打赏
  • 举报
回复
没有注意过,看看有没有记录当前位置的属性
storm97 2003-09-24
  • 打赏
  • 举报
回复
你的再次激活是指重新打开吧?
如果你不关闭,而只是让他的visiable=false;那么下次再让他visiable=true,应该不会还原的。
jjcccc 2003-09-24
  • 打赏
  • 举报
回复
豁,不容易你
isleepy 2003-09-24
  • 打赏
  • 举报
回复
功能终于凑合着实现了,
我在WndProc中记下了ScrollBar的位置,
在窗口激活时候用定时器延时,
LockWindowUpdate(this.Handle);防止闪烁
然后恢复ScrollBar的位置
LockWindowUpdate((IntPtr)0);恢复刷新
jjcccc 2003-09-24
  • 打赏
  • 举报
回复
并且我实验结果也不行啊?
==》怎么会呢,我试过的呀。

isleepy 2003-09-24
  • 打赏
  • 举报
回复
这个函数SetScrollState msdn中都没有详细解释,
并且我实验结果也不行啊?
angelior 2003-09-24
  • 打赏
  • 举报
回复
樓上的說了

樓主可以結貼了

jjcccc 2003-09-24
  • 打赏
  • 举报
回复
一个方法:

在窗体的DeActivated事件加上一句:

this.SetScrollState(0,false);

在Activated事件中加上:

this.SetScrollState(0,true);

就可以了。
isleepy 2003-09-24
  • 打赏
  • 举报
回复
jjcccc,你说的原因不错,谢谢
我的情况是只有一个控件,
但是只要窗口active,这个控件就得到焦点,
滚动条就自动复位到左上,
如何防止滚动条复位?
还没有找到解决方法

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧