Winform用户控件 - 如何获取属性的引用而不是副本

时间:2015-09-07 11:12:10

标签: c# winforms dll user-controls

在我编写的程序中,我提出了用户控件的功能,所以我决定将其分解为自己的项目/ DLL。控件由两个按钮和一个面板组成。但是,当我使用DLL时,我错过了一个关键的功能 - 我无法再更改面板的AutoScrollPosition!我的预感是我得到一份副本,而不是当我去设置它时对该属性的引用...所以这里是代码的概念:

// this works when the user control is native to my project
panelContainer.AutoScrollPosition = new Point(0, myVal + 1);

// this doesn't work when the user control is Referenced in my project    
FromDLL.panelContainer.AutoScrollPosition = new Point(0, myVal + 1);

我可以更改FromDll.panelContainer上的其他属性,例如名称,但我无法更改AutoScrollPosition。两者之间的其他属性完全相同(AutoScroll = false等)。最重要的是,当我在DLL中创建Setter方法时,调用工作:

// Call from project to set DLL's reference to native panel
FromDLL.SetMainPanel(nativePanel);

// Now this works after the call to SetMainPanel
FromDLL.panelContainer.AutoScrollPosition = new Point(0, myVal + 1);

为什么我会获得AutoScrollPosition的副本而不是参考的任何想法?

1 个答案:

答案 0 :(得分:-1)

您需要检查控件客户端大小,而不是 System.Windows.Forms.ScrollableControl.AutoScrollMinSize 。此外,请确保您的System.Windows.Forms.ScrollableControl.AutoScroll 为true并将 System.Windows.Forms.ScrollableControl.AutoScrollMargin System.Windows一起考虑在内.Forms.ScrollableControl.AutoScrollOffset 即可。您可能根本不理解这个概念,就像过去的一些成员一样。

这篇文章对事物有简明扼要的解释: http://www.bobpowell.net/understanding_autoscroll.htm[ ^]。

另见: http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollablecontrol.aspx[ ^]。