Tag: winforms

Winforms – 如何打印整个表单,包括看不见的部分?

我有一个用C#编写的Windows窗体项目。 主窗体上有一个TabControl ,并且要求其中一个用户能够打印其中一个TabPages 。 表格很长,我使用垂直滚动条。 整个表格需要能够打印。 我已经尝试使用DrawToBitmap方法首先转换为位图,但这只包括用户可以看到的表单部分。 我尝试过的其他一些解决方案涉及屏幕捕获,这也有同样的问题。 如何打印或获取整个标签页的图像,包括用户向下滚动时只能看到的部分?

如何在不声明每个对象的情况下保存所有表单设置?

我有一个包含几个文本框,单选按钮,复选框等的表单。现在我分别通过声明每个文件并保存到程序设置来保存它们的值: Properties.Settings.Default.EmailFrom = txtbxEmailFrom.Text; 我想找到一种循环遍历所有对象并尽可能保存其设置的方法,因此我不必单独声明每个对象。 有没有办法做到这一点? 或者更好的方法来保存我的文本框的文本,复选框和单选按钮的检查状态等?

从DataGridView在运行时动态创建RDLC报告

我有一个表单AdvancedSearchForm与DataGridView控件dgrData和一个按钮Report在C#Winform。 单击按钮Report ,我希望带有ReportView控件的表单显示与DataGridView中具有相同列标题的列相同的列。 使用DataGridView和Button进行表单 单击按钮“报告”时预期的输出: 我的DatagridView ( dgrData )控件与 SQL “Select Id, c_Name from Country” 的ConnectionString server=localhost;User Id=root;password=root;Persist Security Info=True;database=country_state 要在运行时将数据加载到网格,我准备以下DataAdapter : DataAdapter dataAdapter = DataAdapter.Current; // I am passing the SQL statement and the table name to my database which knows the ConnectionString within the LoadData function DataTable dt0 = dataAdapter.LoadData(“select Id, c_Name from […]

Winform – 确定鼠标是否已离开用户控件

我正在努力做一些我认为应该很容易的事情(ish)。 我有一个窗体和窗体底部的flowgridlayout面板。 在此表单中,我使用X个用户控件动态填充它。 控件都是相同的类型。 目标是当用户将鼠标hover在用户控件上时,它会打开另一个表单并将其定位在鼠标所在的位置。 当鼠标离开表格时,打开的表格消失。 这几乎很有效。 问题是当用户控件中有标签或文本框之类的东西时。 它被认为已离开UC,因此表格消失。 我的想法是用X和Y来判断它是否在UC内,但我无法弄明白。 请问: 1)最好的方法是什么? 2)我如何对其进行编码,因为UC是动态的,我无法准确知道它们的位置。 谢谢 编辑 我试图找出鼠标指针,但没有到达那里。 以下代码位于UC SmallTagBox_MouseLeave事件中: Point loc = this.Location; Point p = this.PointToScreen(this.Location); Point p2 = this.PointToScreen(this.Parent.Location); Point ms = MousePosition; Rectangle screenBounds = new Rectangle(this.PointToScreen(this.Location), this.Size); if (!screenBounds.Contains(ms)) { thw.Close(); thw = null; } loc {X = 275 Y = 3} […]

NumericUpDown with Unit | 定制控制| 场填充

我试图创建一个inheritanceNumericUpDown以显示可设置单位的自定义控件。 这是(视觉上)到目前为止我得到的: 我的代码: 看起来有点长,但不是那么做 class NumericUpDownUnit : NumericUpDown { public event EventHandler ValueChanged; /// /// Constructor creates a label /// public NumericUpDownUnit() { this.TextChanged += new EventHandler(TextChanged_Base); this.Maximum = 100000000000000000; this.DecimalPlaces = 5; this.Controls.Add(lblUnit); lblUnit.BringToFront(); UpdateUnit(); } public void TextChanged_Base(object sender, EventArgs e) { if(ValueChanged != null) { this.ValueChanged(sender, e); } } /// /// My […]

C#监听器线程的CPU使用率很高,睡眠未命中断开

我的连接处理程序如下(这比个人实验更多,而不是生产代码) 如果我没有在while循环中的任何地方添加一个Thread.Sleep,它会开始吸收CPU。相反,如果我做睡眠以缓解无休止的垃圾邮件,我会错过断开连接.. CPU的比例正常上升对于运行的客户端/线程的数量,所以不是监听器本身导致高使用率,它是下面发布的实际客户端线程..任何人对如何解决这个问题都有任何想法? (我正在避免基于等待的解决方案,因为我对async / await不够熟悉,并且线程方法对于这个相当小的项目工作正常) 我只是在SO周围寻找解决方案,并没有注意到任何这个特定的问题,或者提供了除了指导人们异步/等待文章之外的解决方案,所以很抱歉,如果我错过了适用的答案。 private void HandleConnection(CancellationToken ct) { int recv = 0; byte[] buf = new byte[4096]; Trace.WriteLine($”{_name} Connected”); if (_ns.CanWrite && _client.Connected) { _ns.Write(Encoding.BigEndianUnicode.GetBytes(“■WEL”), 0, Encoding.BigEndianUnicode.GetBytes(“■WEL”).Length); try { while (_client.Connected && !ct.IsCancellationRequested) { while (!_ns.DataAvailable) { //first attempted solution Thread.Sleep(100); // miss discon if i sleep here } if (ct.IsCancellationRequested) […]

Visual Studio 2012项目将于2010年开放

我已经为Visual Studio 2012中的作业创建了一个游戏,而我正在使用2010年的大学,它将无法打开! 它提到了一些关于.NET Framework 4.5的内容。 如何转换我的项目以便在2010年开放?

如何从DataGridView接收“滚动框”类型滚动事件?

我有一个DataGridView,我正在听它的Scroll事件。 这给了我一个ScrollEventArgs对象,其Type成员应该告诉我已经发生的滚动事件的类型。 在MSDN文档页面上,它说我应该能够通过侦听ThumbPosition,ThumbTrack,First,Last和EndScroll类型的事件来检测滚动框的移动。 但是,当我拖动滚动框时,我只获得LargeDecrement和LargeIncrement类型的事件。 如何访问ThumbPosition,ThumbTrack,First,Last和EndScroll事件?

如何在不使用“从屏幕上复制”的情况下,仅将位图捕获为图像框显示的内容?

具体来说:我需要捕获图片框实际显示的特定区域作为位图。 区域的坐标由我已覆盖在图片框顶部的控件的边界指定(但属于图片框)。 当我制作区域的“快照”时,控件被隐藏。 我尝试使用普通的屏幕捕获方法(CopyFromScreen),但你无法真正控制那里的时间。 所以它正在捕捉“插页式”状态,比如我的图片框中的照片之间的过渡。 它经常只捕获纯黑色图像(图片框的背景颜色)。 所以我尝试将显示的图像(picturebox.image属性)转换为位图。 问题是图片框很少显示图像。 它显示了一些图像的部分,根据它的尺寸模式(缩放)进行缩放和剪裁。 所以我不能只拿走我的控制坐标并将它们从整个图像中剪切掉。 所以我试着估计图像的哪个部分正在显示,并根据它来修正我的矩形。 事实certificate,我基本上是在重新创建图片框的“缩放”代码来实现这一点(使用图片框的宽高比,图像的宽高比,猜测图像当前正在发生什么级别的缩放,如果它更大或小于图片框等)。 它不漂亮。 所以:现在我需要一种只捕获当前正在图片框的客户区显示的位图的方法,包括照片和当前正在其周围显示的任何黑色“信箱”。 有人有吗? 请记住,我不能依赖使用CopyFromScreen。 它对我的目的来说不够可靠。 我想我需要一种获取图片框的方法来告诉我它正在显示的位。

如何将Label放在Panel中心而不将Dock设置为Fill

我试图创建一个带有边框的自定义面板,其颜色可以更改,以便在某些条件下“突出显示”面板。 小组还需要通过案文传达某些信息。 为此,我在Panel中添加了一个Label。 我已尝试使用规定的方法对Label进行居中,但由于某种原因,它总是将它放在Panel的左上角。 我无法将Label的Dock设置为Fill,因为它掩盖了已创建的自定义边框。 所以我需要做到这一点,以便Label适合边框。 Label的Anchor设置为None,其位置为 new Point((ClientSize.Width – Size.Width)/2, (ClientSize.Height – Size.Height)/2); 自定义Panel的代码是: public class CustomPanel : Panel { public CustomPanel(int borderThickness, Color borderColor) : base() { SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true); BackColor = SystemColors.ActiveCaption; BorderStyle = BorderStyle.FixedSingle; Size = new Size(45, 45); Margin = new Padding(0); BorderThickness = borderThickness; […]