【问题标题】:Non-desirable auto-scrolling to the beginning of the form不希望的自动滚动到表单的开头
【发布时间】:2011-02-04 11:00:01
【问题描述】:

我有一个包含一个控件的表单:面板,它比表单本身大得多。因此,表单的滚​​动条用于导航此面板。表单的Autoscroll 属性设置为true。问题是:在显示任何对话框窗口后,AutoscrollPosition 被设置为开始。我如何覆盖此行为以保存滚动位置。

【问题讨论】:

  • 你为什么使用表单自动滚动为什么不使用面板的自动滚动
  • @Shekhar_Pro 因为表单可以调整大小,会出现两个卷轴,这是不希望的。
  • 好吧它的winforms...你之前没有提到过...

标签: c# .net winforms panel autoscroll


【解决方案1】:

您可以通过在代码中手动设置滚动位置来覆盖它。只需使用表单的 Activated 和 Deactivated 事件。

在此处查找相同问题的答案和代码

https://stackoverflow.com/questions/2020938/why-does-scrolling-position-change-after-refocusing-the-form/2022561#2022561

【讨论】:

  • 感谢您的回复和有用的链接。但是,奇怪的是,只有当我在 MDI 应用程序中选择另一个窗口时才会触发事件 Activated 和 Deactivated。但是显示对话框不会触发这些事件。我通过下一个代码验证了它: Deactivate += (s, e) => { MessageBox.Show("Deactivated"); };已激活 += (s, e) => { MessageBox.Show("已激活"); };
  • 你不能这样做,因为你测试它的方式是将上面的代码放在表单本身中,这样你只会得到 Deactivate Event 而不是 Activate 事件,因为 MessageBox 窃取了焦点(这证明消息框导致停用事件)并因此停用表单。要正确测试它,请通过显示消息框的按钮单击事件对其进行测试
  • @Micha 我刚刚检查了它并打开一个对话框(我尝试了 OpenFileDialog)使表单停用。所以我的答案链接中的代码应该可以工作。
  • T@Shekhar_Pro MessageBoxes 的想法不好:) 谢谢你指出。但是,事件仍然没有被触发——我在那里设置了断点。我认为我的问题与我使用 MDI 的事实有关:social.msdn.microsoft.com/Forums/en/winforms/thread/…
猜你喜欢
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
相关资源
最近更新 更多