如何解决月历日历上不同的宽度平台,校正:主题XP与Aero主题
| 显然,.NET monthcalendar在不同平台上的呈现方式有所不同。 Vista上的日历比XP日历宽。 我想让日历在所有平台上都能很好地契合。 有没有一种方法可以执行此操作,而不必测量和硬编码不同的宽度? .............. 编辑/更正: 日历似乎根据您选择的主题而有所不同: 如何弥补呢?解决方法
那是预期的行为。如果不想受到主题的影响,请完全禁用主题设置(即,不要执行命令“ 0”)。否则,不同的主题将始终为控件产生不同的外观(如它们的意图一样)。如果您想随时插入控件,请使用锚点和停靠点使用更流畅的布局。
,我遇到了同样的问题,找到了解决方法:
似乎在运行时显示dimensions1ѭ控件的尺寸(如以表单形式)时,其尺寸已正确更新。
使用例如表单的
Shown
事件来知道何时更新尺寸。
您还可以将窗体的AutoSize
属性设置为true
,并将AutoSizeMode
属性设置为GrowAndShrink
,以使窗体自动适合MonthCalendar
控件。
更新:
有关更多详细信息,请尝试以下示例:
将MonthCalendar控件放在这样的窗体上:
在表单的Shown事件中添加以下内容:
public static int CalenderWidth = 0,CalenderHeight = 0;
private void Form1_Shown(object sender,EventArgs e)
{
CalenderWidth = monthCalendar1.Width;
CalenderHeight = monthCalendar1.Height;
MessageBox.Show(\"MonthControl width: \" + CalenderWidth.ToString() +
\",height: \" + CalenderHeight.ToString());
}
程序运行时,您将看到一个显示正确尺寸的消息框。
宽度和高度也被放入两个变量,您可以在程序中的任何地方使用它(我知道这是一种快速而肮脏的方式;-)
当然,如果您不想要它,可以忽略它。
要检查它是否确实有效,请尝试在Windows中更改“区域”设置:将“格式”更改为例如丹麦文再次运行该程序,由于丹麦MonthCalender控件较小,因此您将看到宽度变小。
关于AutoSize
和AutoSizeMode
属性,它们可用于使表单的大小适应MonthCalender控件的大小。做这个:
将窗体中的两个属性更改为此:
现在运行程序,您将看到窗体的大小根据MonthCalender控件的大小自动更改:
而已! (请记住,将您的“地区”格式设置切换回原始设置)
;-)戴夫
,好吧,我发现了这个:
http://www.eggheadcafe.com/software/aspnet/34174436/vista-monthcalendar-control.aspx
再次欢迎您来到Microsoft Manage Newsgroup,我是叶志新,是我
很高兴在这个问题上与您合作。
MonthCalendar控件由操作系统呈现,因此呈现
XP和Vista之间有所不同。您可以使用
Environment.OSVersion.Version.Major属性确定操作系统版本,
并调用MontheCalendar.GetPreferredSize()方法以检索首选对象
Vista的大小,以便您可以以编程方式更改表单的大小
使它适合MonthCalendar。同时,打开AutoSize属性
将该表单的值设置为true,以便在Vista上调整该表单的大小,并确保
MonthCalendar的Dock属性设置为Dock.None。
供您参考的示例代码:
私有void Form1_Load(对象发送者,EventArgs e)
{
如果(Environment.OSVersion.Version.Major> = 6)
{
this.Size = this.monthCalendar1.GetPreferredSize(new
尺寸());
}
}
请尝试我的建议,让我知道这对您是否有意义。如果
您有任何疑问或疑虑,请随时让我知道。
最好的祝福,
叶志新
Microsoft托管新闻组支持团队
似乎有一种专门针对此问题设计的方法:
this.monthCalendar1.GetPreferredSize(new Size());
但是,我在多台计算机上测试了此方法,无论主题或操作系统如何,该方法始终为您提供178 px的首选宽度。 (据我测试)。 !
因此,受够了,我只想给日历添加178的宽度,并计划购买商业控制之类的东西。
感谢您的所有帮助...
,我的应用程序正在使用Application.EnableVisualStyles();
我在CreateHandle()方法中禁用了日历的视觉样式:
public class MonthCalendarBuffered : MonthCalendar
{
protected override void CreateHandle()
{
Application.VisualStyleState = VisualStyleState.NoneEnabled;
// disables Application.UseVisualStyles
base.CreateHandle();
// restore setting
Application.VisualStyleState = VisualStyleState.ClientAndNonClientAreasEnabled;
}
...
在以下位置检查日历控件源:
http://referencesource.microsoft.com/#System.Windows.Forms/ndp/fx/src/winforms/Managed/System/WinForms/MonthCalendar.cs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。