Tag: winforms

使控制对接和滚动条播放得很好

我有一个面板有时需要比自然适合更多的垂直屏幕空间,所以它需要能够垂直滚动。 所以,它都设置为AutoScroll。 控件包含在TableLayoutPanel中并设置为dock,因此它们应调整其宽度以匹配。 然而,当控件触发滚动条时,它总是最终创建一个水平滚动条,即使在被违反的控件上没有最小宽度约束。 它基于先前的宽度创建水平滚动条,而不是遵循停靠命令并重新绘制控件以适应新的宽度。 这有更好的方法吗?

Picturebox位图缩放

我有一个Picturebox和Picturebox可以在其中显示的Bitmaps 。 与其他位置相比,位图的相对大小对用户来说很重要。 他们需要能够看到一个图像比另一个图像更小或更大。 位图也必须完全适合图片框,并且无法调整图片框的大小。 当简单地在巨大的图片框中显示未缩放的位图时,位图的相对大小很容易看到,但是当试图将它们放在一个小盒子中并且必须缩小它们时我的问题就开始了。 当您使用Stretch PictureBoxSizeMode ,由于Bitmaps的非特定大小,图像有时会显得扭曲,然后无论如何它们都会被拉伸以填充整个框,但Stretch sizemod最接近我需要的类型。 没有其他尺寸模式适合我的需要,所以我现在知道我需要创建一个函数来调整Bitmap的大小,这是我尝试的开始,直到我意识到我的方向完全错误,这里返回的图像没有保留”。 private Bitmap ResizeBitmap(Bitmap img) { int newWidth = 0; int newHeight = 0; double imgRatio; if (img.Width > img.Height) { imgRatio = ((double)img.Height / (double)img.Width) * 100; newWidth = pictureBox.Width; newHeight = (int)(((double)newWidth / 100) * imgRatio); } else { imgRatio = ((double)img.Width / […]

没有办公室的Excel到PDF

我需要在我正在处理的Windows应用程序中生成PDF报告,我通过将.xlsx文件导出为pdf来完成此操作。 我目前正在使用互操作,但是: 我需要这样做而不需要用户购买软件,因此没有微软办公室擅长。 我也不能使用任何重依赖(如open / libre office)。 该应用程序在.NET winforms中并且是本地的(不依赖于Internet连接)。 我试过的事情: 我已经尝试过iTextSharp,但是这会像溢出列这样的东西变得非常复杂。 试过closedXML但无法转换为PDF。 (如前所述)尝试互操作但无法找到办法让它独立于办公室。 将不胜感激,谢谢你提前:) 编辑: iTextSharp的 我会使用它,除了我需要导出一个具有可变列数(最多30列)的大型DataTable,如果有很多列,那么处理该列溢出变得非常复杂,这在互操作中很容易。 阅读Aspose 看起来太贵了,因为我在一家目前资源非常有限的小公司工作。

C#:在不选择文本的情况下更改WinForm RichTextBox的字体样式

我在我的代码中使用RichTextBox ,我在其中显示语法突出显示的代码。 现在,在每次按键时,我都必须重新解析所有令牌并重新为它们重新着色。 但是,在WinForm richtextbox为单个单词着色的唯一方法是逐个选择这些单词并使用SelectionFont对它们进行着色。 但是如果用户输入的速度非常快,那么我选择单个单词会导致非常明显的闪烁(所选单词具有Windows蓝色背景,导致闪烁)。 有没有什么方法可以在不选择它们的情况下为单个单词着色(从而在所选文本周围产生蓝色高光)。 我尝试使用SuspendLayout()在我的着色期间禁用渲染,但这没有帮助。 提前致谢! 这是我的代码: 码: private void editBox_TextChanged(object sender, EventArgs e) { syntaxHighlightFromRegex(); } private void syntaxHighlightFromRegex() { this.editBox.SuspendLayout(); string REG_EX_KEYWORDS = @”\bSELECT\b|\bFROM\b|\bWHERE\b|\bCONTAINS\b|\bIN\b|\bIS\b|\bLIKE\b|\bNONE\b|\bNOT\b|\bNULL\b|\bOR\b”; matchRExpression(this.editBox, REG_EX_KEYWORDS, KeywordsSyntaxHighlightFont, KeywordSyntaxHighlightFontColor); } private void matchRExpression(RichTextBox textBox, string regexpression, Font font, Color color) { System.Text.RegularExpressions.MatchCollection matches = Regex.Matches(this.editBox.Text, regexpression, RegexOptions.IgnoreCase); foreach (Match match in […]

给定.net控件,我可以获得工具提示吗?

我有一个.net控件(好吧,其中很多)。 我可以在任何给定的控件上调用方法,但不能创建新的控件或访问我没有控件的类的静态方法。 我无权访问任何工具提示对象。 有什么办法可以获得给定控件的工具提示对象吗? (我们在Java中使用相当受限制的测试自动化框架来访问用C#.net编写的应用程序的控件,这是这个奇怪查询背后的背景) ETA:也许我没有说清楚。 我不是要设置工具提示,我正在尝试获取现有的工具提示。 我无法创建新的控件,所以任何包含new Foo()都不会起作用。

阻止&符号转换为Windows窗体绑定的助记符/加速器

可能重复: 在Windows窗体中的文本标签中输入“&”符号? 在标签控件绑定到用户填充属性的屏幕上,我在标签上加下划线字符(助记符),因为基础数据包含&符号。 例如,如果绑定属性包含“A&B Trucking”,则标签显示为“AB Trucking”,B带有下划线。 键盘上的Alt-B会聚焦该标签。 你如何防止绑定控件发生这种情况?

启动浏览器并从winform应用程序向其传递数据

我有一个winform应用程序需要在新的浏览器窗口中打开一个URL并将数据传递给它。 此外,数据太大,无法通过查询字符串参数。 有没有办法启动一个新的浏览器实例并以某种方式将数据作为表单数据或会话传递?

在C#Winforms上validationTextbox的输入

我试图validationC#winforms上文本框的输入是否符合有效模式。 模式必须是仅包含以下字符的字符串 0到9 A到Z. “ – ” “/” 我正在考虑使用文本框上的“validation”事件来执行validation,但我正在努力使用正确的正则表达式 – 或者可能有比使用正则表达式更好的方法。

如何以及何时为WinForms控件处理Font

当分配任何控件的Font属性时,静态代码分析工具(来自HP的Fortify)抱怨Visual Studio Designer生成的WinForms代码。 分析工具抱怨: line 143: this.mCopyrightLabel.Font = new System.Drawing.Font(“Microsoft Sans Serif”, 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); AboutWindowForm.cs中的函数InitializeComponent()无法正确处理第143行上Font()分配的非托管系统资源。 说明: 该程序无法正确处置使用非托管系统资源的托管对象。 无法正确处置使用非托管系统资源的托管对象至少有两个常见原因: 错误条件和其他特殊情况。 混淆程序的哪个部分负责释放资源。 在这种情况下,有一些程序路径,在第143行的AboutWindowForm.cs中分配的资源没有正确处理。 托管.NET对象的一小部分使用非托管系统资源。 .NET的垃圾收集器可能无法以可预测的方式释放原始托管对象。 因此,应用程序可能耗尽可用内存,因为垃圾收集器不知道非托管资源所消耗的内存。 大多数非托管资源泄漏问题导致一般软件可靠性问题,但如果攻击者可以故意触发非托管资源泄漏,则攻击者可能会通过耗尽非托管资源池来启动拒绝服务攻击。 我已经搜索了关于在Windows窗体中处理字体一段时间的主题,这些是我收集的要点: 创建字体将占用GDI对象,这是一个非托管资源,因此在不再需要时释放非常重要 由于GDI对象昂贵且稀缺,WinForm会缓存它们。 Dispose WinForms控件还将处理其所有子控件并“释放获得的非托管资源” 如果表格是无模式的,表格将在关闭时处理 因此,我想得出结论,在VS生成的代码中没有必要显式分配给控件的Font,并且我们不应该这样做,因为字体是缓存的? 我创建了一个非常简单的表单测试程序:通过单击一个按钮,我创建了一个使用不同字体的新空表单。 关闭新打开的表单后,任务管理器中的GDI对象计数立即关闭。 这是上述要点的证据,不是吗? 然而静态分析仪似乎不相信。 它认为Font最终将由GC发布。 它还认为这对非托管资源不利,因为消耗的内存位于GC的知识之外,因此GC不会及时触发,因为GC感觉没有内存压力。 这为攻击者提供了故意触发耗尽非托管池的机会。 你能帮我理解分析仪给出的解释吗? 它对WinFroms有效吗? 手动处理创建的每个Font会很繁琐。 确切地说: 在控件的Dispose期间是否立即明确地处理Font,或者Control释放对Font的引用并让GC处理所有左边的? 谢谢! 我的问题的进一步更新:我做的另一个实验是:我在TaskManager和内存分析器中监视我的测试WinForm应用程序。 主窗体有一个按钮,用于打开另一个窗体,其单击时字体不同。 我注意到当我单击按钮并打开新窗体时,TaskManager中的GDI对象计数会增加。 因此,内存分析器观察到Font对象的计数。 但是,当我关闭新窗体时,TaskManager中的GDI对象数量立即下降。 内存探查器中Font对象的数量没有变化,这意味着GC没有发生。 但是,这些Font对象在内存分析器中被标记为“已处置但未收集”。 它给我这种感觉,当Form关闭时,Font对象设置为WinForms […]

如何对绑定到自定义对象集合的DataGridView进行排序?

所以我一直在关注Windows Forms控件的数据绑定这个指南 (MAD道具给作者,这个指南很棒),我用它来创建一个自定义类并将DataGridView绑定到这个类的集合: class CompleteJobListEntry { private string _jobName; private Image _jobStatus; private DateTime _jobAddedDate; private string _jobAddedScanner; private string _jobAddedUser; private string _jobLastActivity; private DateTime _jobActivityDate; private string _jobActivityUser; public string JobName { get { return _jobName; } set { this._jobName = value; } } public Image JobStatus { get { return _jobStatus; } […]