当前位置: 首页 > 编程语言 > C#

使用户控件显示在窗体边界外Share

时间:2023-04-10 23:40:18 C#

使用户控件显示在窗体边界外我决定重新实现日期时间选择器,因为标准日期时间选择器不可为空。用户希望从一个空白字段开始并键入(而不是选择)一个日期。我已经创建了一个用户控件来执行此操作,但是如果用户控件靠近窗体的边缘,那么它会在窗体边界处被切断。标准的日期时间选择器不会遇到这个问题。这是显示问题的图片。我的用户控件在左边,标准的日期时间选择器在右边:alttexthttp://img50.imageshack.us/img50/9104/datetimepickervu6.jpg如您所见,标准控件将显示在表单和应用程序上边界。我怎样才能让我控制的月份选择器做同样的事情?谢谢!ToolStripDropDown控件具有此功能,因此通过继承它,我们可以创建一个简单的PopupWindow。//////一个可以承载任何System.Windows.Forms.Control的简单弹出窗口///publicclassPopupWindow:System.Windows.Forms.ToolStripDropDown{privateSystem.Windows.Forms.Control_content;私有System.Windows.Forms.ToolStripControlHost_host;publicPopupWindow(System.Windows.Forms.Controlcontent){//基本设置...this.AutoSize=false;this.DoubleBuffered=true;this.ResizeRedraw=true;this._content=内容;this._host=newSystem.Windows.Forms.ToolStripControlHost(内容);//定位和调整大小this.MinimumSize=content.MinimumSize;this.MaximumSize=content.Size;this.Size=content.Size;content.Location=Point.Empty;//将主机添加到列表中this.Items.Add(this._host);}}用法:PopupWindowpopup=newPopupWindow(MyControlToHost);popup.Show(新点(100,100));...弹出.Close();屏幕截图看起来像Windows窗体应用程序,所以我的答案是针对winforms的。我想最好的解决方案是创建一个自定义控件,该控件本身使用已经具有该行为的日期时间选择器。在单击之前显示一个空文本框,然后显示日期时间选择器。这将为您节省一大堆代码。我在尝试实现自定义控件时遇到了这个问题,发现它是一个非常困难的问题。Windows.Forms模型中没有内置功能来支持显示区域超出其容器客户区的控件。您基本上必须使用WindowsAPI或在设置了AlwaysOnTop的窗体中绘制控件。这两种方法都比它们应该的更难。我最终重新设计了我的控件,这样它就不会在下拉列表中显示其扩展内容,而是使用模式对话框。这是一个非常不令人满意的解决方案,但我花了数周时间尝试其他方法,并且永远无法获得在所有用例中始终如一地工作的任何东西(比如当应用程序失去焦点时消失)。我不是100%确定,但快速查看Reflector上的DateTimePicker类会将我带到SafeNativeMethods.SetWindowPos内部类。您可以从基类Control覆盖SetBoundsCore,或者如Tigraine所述,创建基于DateTimePicker的自定义控件。希望它能有所帮助,删除BrunoFigueiredo控件的原因是因为它是您所在窗体的子控件。对表单的任何控制都必须包含在表单中,因此它被删除了。我没有在.Net中这样做,但在VB6中遇到了类似的问题。解决方案是将弹出窗口的父级(在您的情况下为日历)设置为桌面。这将允许它超出表单的范围。您必须执行一些P/Invoke魔法才能找到弹出窗口的hWnd,并使用另一个P/Invoke来设置父级。以上就是C#学习教程:让用户控件显示在窗体边界外,共享所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: