Tag: winforms

如何在设计时创建可以订阅另一个WinForm控件的C#属性?

我想在控件中创建一个属性,该控件将充当一个能够连接到另一个非可视控件以显示其当前状态的查看器。 在这个例子中,假设观众只会显示在线或离线的状态 。 我希望能够删除一个非可视控件,让我们在窗体IHeater类型的IHeater ,然后放下HeaterMonitor 。 我想进入HeaterMonitor的属性,对于自定义Source属性,请查看当前表单上所有IHeaters的列表。 在Source属性中选择实例( Heater1 )会将HeaterMonitor1订阅到Heater1生成的所有状态更新。 是否存在我可以作为模板遵循的现有模式? 如果它有所作为,我可以使用.net 3.5及更高版本。 我选择data-binding作为标记,但我不确定这是否正确,因为这不是数据库问题。 但它看起来类似于选择DataSource属性的DataGridView 。 编辑#1:根据到目前为止的评论,我认为我没有强调我想要得到的东西。 我希望属性编辑器在表单上列出符合条件的IHeater控件。 我没有创建我可以在运行时分配的常规IHeater属性的问题。

C#中的Thread.Sleep()

我想在C# Visual Studio 2010中制作一个图像查看器,它在几秒钟后逐个显示图像: i = 0; if (image1.Length > 0) //image1 is an array string containing the images directory { while (i < image1.Length) { pictureBox1.Image = System.Drawing.Image.FromFile(image1[i]); i++; System.Threading.Thread.Sleep(2000); } 当程序启动时,它会停止并向我显示第一张和最后一张图像。

从TextBoxes中的Chart Values获取绘图点的坐标?

在设计师中我有两个TextBoxes。 还有一个Chart控件。 我希望当我输入第一个textBox时数字120和第二个输入数字1它将在120,1中绘制图表上的点,但我的意思是120和1作为轴x和轴y值。 红色圆圈不在120和1.我的意思是红色圆圈应该在120的左轴上绘制。如果我将代替120 116而不是1 25,那么应该在左轴上绘制圆圈116并在25的底部轴上。 但现在圆圈被绘制出图表。 这是我的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; using System.Drawing.Drawing2D; using System.Collections; namespace Test { public partial class Form1 : Form { private Point startPoint = new Point(); private Point endPoint = new Point(); private […]

在UserControl中公开DataGridView的Columns属性,并使其可通过Designer进行编辑

简短的介绍: 我有一个带有DataGridView的UserControl。 我想将DataGridView Columns集合暴露给设计器,因此我可以在设计时更改User Control上的列。 问题:我需要哪些设计师属性? 对于那些对较长版本感兴趣的人: 我有一个具有以下function的UserControl: 一个DataGridView,显示集合中项目的“页面”。 一个NumericUpdown控件,用于选择要显示的页面。 页面向上/向下翻页按钮,在显示第一页/最后一页时将禁用 可视地标记对显示项目的更改 用于保存/放弃更改的按钮。 此用户控件可以自动运行。 它有一个由父控件使用的函数: 显示页面(要显示的项目集合) UserControl引发了两个事件: 事件页面已更改(带有页码)。 应该导致加载新页面 事件保存项目(包含已更改项目的集合) 我必须在几个表单上显示此用户控件。 唯一的区别是DataGridViewColumn的集合因表单而异。 我可以通过编程方式添加列,但使用设计器创建它们会更容易。

将datagrid视图背景设置为透明

我试图将数据网格视图的背景颜色设置为从属性“透明”,但它表示“不是有效的属性”。 我该怎么做?

按钮的动画发光效果 – C#Windows窗体

我想按下按钮时将动画应用到我的按钮。 在WPF中,我可以使用Storyboard和触发器来创建动画。 这是一个例子: 和: Windows窗体没有Storyboard和触发器。 如何在Windows窗体中制作流畅的动画? 这是我的Windows窗体代码: void DelayTime() { timer = new Timer(); timer.Interval = (int)System.TimeSpan.FromSeconds(this.DelayTime).TotalMilliseconds; timer.Tick += (s, es) => { this.mouseover = false; this.Cursor = Cursors.Hand; this.Enabled = true; }; timer.Start(); } protected override void OnMouseDown(MouseEventArgs mevent) { base.OnMouseDown(mevent); mouseover = true; this.Enabled = false; DelayTime(); } protected override void OnPaint(PaintEventArgs e) […]

WS_EX_TRANSPARENT – 它实际上做了什么?

在我的项目中,我创建了一个由用户控制的不透明度的表单。 如果表单是完全透明的,那么鼠标事件会“通过”(没有我的干预),否则我的表单会处理它们。 在阅读此问题并覆盖CreateParams属性以在WS_EX_TRANSPARENT上设置WS_EX_TRANSPARENT标志后,它现在允许鼠标事件在不透明度为任何值<255时通过。 这正是我想要的,但它让我担心我不明白它为什么会起作用。 根据我的阅读,WS_EX_TRANSPARENT旨在通过在Paint方法中从其下面的表单中“窃取位”使表单显得透明,因此: 我的表单的Paint方法及其中的所有控件都不应该被调用,对吧? 由于WS_EX_TRANSPARENT应该导致Windows覆盖它们,那么为什么它会影响输入处理而不影响我的表单? 不透明度应该对鼠标事件的处理没有影响,就像要覆盖Paint一样,“局部”不透明度应该不重要,不是吗? 有人可以解释一下,这面旗帜究竟是做什么的 它是如何工作的?

如何在不使用数据库的情况下存储数据以及如何检索它们?

我正在解析html文件以通过列名提取表格信息。 我希望让用户为列名提供输入。 并根据该列名称将提取表格信息。 现在,用户将输入的列名称,根据该列名称,我想从html文件中找到表格信息。 但是我应该在哪里存储用户输入的列名? 以及如何检索它们? 我不想使用数据库。 编辑 :我们如何在xml文件中存储数据以及如何从中检索数据以及如何更新xml文件以存储数据? 就像我有3个列名称Name, Address,Phone no ,对于该用户,将输入可能的列名,如Nm,Add,PhNo. 和Nam,Addre,PhoNo等。

使用DoubleBuffering和FormBorderStyle.None在Windows10上重绘问题

我有一个Windows窗体项目的问题,我只能在Windows 10机器上重现(在Windows 7上它确实有效)。 我认为我可以隔离问题的来源,即,如果我打开双缓冲并将FormBorderStyle设置为None ,那么如果我在事件处理程序中调整窗体大小,则背景的部分和一些控件不会被重绘。 它也是如此,有时它起作用(从五点开始一次)。 没有重新绘制它看起来如此(通常有点不同): 它应该看起来像: 要重现这个问题,只需将几个控件添加到表单中(可能数量也很重要),通过覆盖CreateParams切换双缓冲, FormBorderStyle=None (使用另一种边框样式!)。 代码背后: public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED return cp; } } private bool small = true; private void button1_Click(object sender, […]

如何在Windows窗体中创建垂直导航栏?

我正在研究我的学校项目,Windows表单应用程序。 正如你所见,我创建了3个面板,一个用于标题,一个用于导航栏,一个用于内容。 我可以将标题和导航栏静态化,例如网页中的布局,以及更改btn点击内容。 我创建了几个面板,并为每个面板更改可见性(true / false)以显示特定面板。 有没有更好的做到这一点,我认为它必须更优雅,我开始,它的学校项目和我找到聪明的答案。