Tag: winforms

C#窗口定位

使用Windows窗体我想将窗口定位到特定的坐标。 我认为它可以用一种简单的方式完成,但是下面的代码根本不起作用: public Form1() { InitializeComponent(); this.Top = 0; this.Left = 0; } 但是,当只获得该窗口的句柄时,它运行良好: public Form1() { InitializeComponent(); IntPtr hwnd = this.Handle; this.Top = 0; this.Left = 0; } 您可以看到我根本不使用该指针。 我在MSDN上发现以下声明: Handle属性的值是Windows HWND。 如果尚未创建句柄,则引用此属性将强制创建句柄。 这是否意味着我们只能在创建句柄后设置窗口位置? 是否在内部使用此手柄设置了顶部/左侧? 谢谢你的澄清。

如何消除动画撕裂?

我在WinForms应用程序中以18.66666运行动画…每秒帧数(它与140 BPM的音乐同步,这就是为什么帧速率很奇怪)。 动画的每个单元都是预先计算的,动画由高分辨率多媒体计时器驱动。 动画本身很流畅,但是我看到了大量的“撕裂”,或者是因为屏幕刷新中途被cels捕获而导致的文物。 当我获取我的程序渲染的一组cels并将它们写出到AVI文件,然后在Windows Media Player中播放AVI文件时,我看不到任何撕裂。 我假设WMP平滑播放文件,因为它使用DirectX(或其他东西)并且能够将渲染与屏幕的刷新活动同步。 它不会改变帧速率,因为动画与音频保持同步。 这是为什么WMP能够渲染动画而不会撕裂,或者我错过了什么? 有没有什么方法可以使用DirectX(或其他东西),以使我的程序能够知道当前扫描线的位置,如果是,有什么方法可以使用该信息消除撕裂而不实际使用DirectX用于显示cels? 或者我是否必须完全使用DirectX进行渲染才能解决此问题? 更新 :忘了细节。 我的应用程序使用Graphics.DrawImage将每个单元格渲染到PictureBox上。 这是否比使用BitBlt慢得多,这样我可以通过使用BitBlt来消除至少一些撕裂? 更新2 :我看到的效果肯定不是闪烁(这与撕裂不同)。 我的面板是双缓冲的,为AllPaintingInWmPaint,UserPaint,OptimizedDoubleBuffer等设置控件样式,覆盖onPaintBackGround等等。 所有这些都是消除闪烁所必需的,但撕裂的问题仍然存在。 当动画具有非常快速移动的物体或物体从非常快速地从亮到暗变化时,它尤其明显。 当物体缓慢移动并且不会快速改变颜色时,撕裂效果就不那么明显了(因为连续的cels总是非常相似)。

为什么我会遇到exception:在webclient上尝试了太多的自动重定向?

在form1的顶部,我做了: WebClient Client; 然后在构造函数中: Client = new WebClient(); Client.DownloadFileCompleted += Client_DownloadFileCompleted; Client.DownloadProgressChanged += Client_DownloadProgressChanged; 然后我有这个方法我每分钟打电话: private void fileDownloadRadar() { if (Client.IsBusy == true) { Client.CancelAsync(); } else { Client.DownloadProgressChanged += Client_DownloadProgressChanged; Client.DownloadFileAsync(myUri, combinedTemp); } } 每隔几分钟它就会从网站上下载一张图像。 这一切都工作超过24小时没有问题,直到现在在下载完成的事件中抛出此exception: private void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) { if (e.Error != null) { timer1.Stop(); span = new TimeSpan(0, (int)numericUpDown1.Value, […]

将焦点设置为.NET UserControl ……?

我正在创建一个从UserControl派生的自定义控件,我想将焦点设置为。 自定义控件包含一个ComboBox控件,我在它旁边绘制一些字符串。 ComboBox可以获得焦点,但我希望能够将焦点设置为UserControl本身。 如果它具有焦点,我的OnPaint处理程序设置为稍微不同地绘制控件,但是当我创建自定义控件时它从父窗体调用CanFocus()并返回false。 是否有财产或其他东西?

单击控件内的文本时,用户控件单击事件不起作用?

我有一个名为GameButton的用户控件,里面有一个标签。 当我将用户控件添加到我的表单并向其添加单击事件时,单击自定义按钮的背景时会触发它,而不是标签中的文本? 如果不在用户控件代码中添加一堆点击事件,我该如何解决这个问题? 编辑:UI框架:winforms

如何将Wpf窗口设置为Winforms表单的所有者

如何将System.Windows.Window设置为System.Windows.Forms.Form的所有者? 在我搜索了一段时间后才意识到我已经在我的一个utils类中得到了答案,我决定将答案放在stackoverflow上。 希望有人发现这很有用。

如何让鼠标位置超过某个控件

Windows窗体 我在layoutpanel上使用DragOver事件,DragEventArgs返回鼠标相对于屏幕的X / Y坐标。 我知道有一个函数可以将它转换为鼠标在控件上的位置,但是我很难找到它。

Winforms将ComboBox SelectedItem绑定到Object属性

我有两个简单的类: public class Customer { public String CustomerID { get; set; } public String Forename { get; set; } public String Surname { get; set; } } 和 public class Order { public String OrderID { get; set; } public Decimal Value { get; set; } public Customer OrderedBy { get; set; } } 然后我创建一个Customer对象列表: […]

在C#中获取combobox文本

我用Enum的值填充了一个combobox。 现在combobox是文本吗? 所以我正在使用一个吸气剂和一个二传手。 我在阅读文本时遇到了问题。 这是代码: public BookType type { get { return (BookType)Enum.Parse(typeof(BookType), this.typeComboBox.Text); } set { this.typeComboBox.Text = value.ToString(); } } 出于某种原因,当我在combobox中选择一个项目时, this.typeComboBox.Text总是返回一个空字符串。 有人看到我做错了吗? 编辑:我得出结论,问题在于时机。 在我更改combobox之后,我确实召唤文本的时间点,但仍然在该值被解析为值之前。 现在以不同的方式解决问题,感谢所有的想法。

DataGridView的最右列如何填充表单的剩余部分?

我有一个5列的DataGridView ,其中dock = filled 。 当表单最大化时,我希望最后(最右边)列的宽度填充表单的剩余右侧。 我怎样才能做到这一点?