当我尝试使用UI Automation的UI自动化时,我只能在使用RangeFromPoint时获得第一个字符/单词

该代码适用于Word和Outlook但由于PowerPoint失败,因为只有文本框的第一个字符或第一个字被选中。 这是一个错误吗? 有没有解决方法? 在PowerPoint 2013中的简单PowerPoint幻灯片上试试这个。 private static async Task getText(double x, double y) { string result = null; try { var location = new System.Windows.Point(x, y); AutomationElement element = AutomationElement.FromPoint(location); object patternObj; if (element.TryGetCurrentPattern(TextPattern.Pattern, out patternObj)) { var textPattern = (TextPattern)patternObj; var range = textPattern.RangeFromPoint(location); range.ExpandToEnclosingUnit(TextUnit.Word); range.Select(); var text = range.GetText(-1).TrimEnd(‘\r’); return text.Trim(); } else […]

Winforms:validationdatagridview中的单元格的问题

我想用CellValidatingvalidationWinforms datagridview单元格。 如果用户未正确设置值,我设置ErrorText并使用e.Cancel ,以便光标保留在单元格中。 现在的问题是, 错误符号 (和错误文本 )没有显示(在单元格中)。 当我删除e.Cancel时,单元格会丢失焦点并显示错误符号。 如何实现单元格保持编辑模式并显示错误符号? if (…) { this.datagridviewX.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = “Errortext”; e.Cancel = true; } else { this.datagridviewX.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = “”; }

IList 到IList

我有几节课: class Vehicle { } class Car : Vehicle { } 我有一个派生类的列表: IList cars; 我想将列表转换为其基类,并尝试: IList baseList = cars as IList; 但我总是null 。 也 cars is IList evaluates to be false. 当然,如果我执行以下操作,我可以将项目添加到列表中: List test = new List (); foreach ( Car car in cars ) { test.Add(car); } 我得到了我的清单,但我知道必须有更好的方法。 有什么想法吗?

在JS中访问Asp.Net会话变量

我无法访问我的.js文件中的变量 我在页面顶部的代码是: privilage = ”; 然后我想在我的.js文件中访问privilage。 我只是想提醒这一点。 我能做到吗? 谢谢

如何通过直线和曲线填充所有内容?

我正在使用Windows窗体中的图表组件。 我使用创建一条straight line chart1.Series[“Grenzwert”].Points.Add(new DataPoint(0, y)); chart1.Series[“Grenzwert”].Points.Add(new DataPoint(maxwidth, y)); 我还绘制了一系列由一条线连接的点,我们称之为curve 。 如何在straight line和curve下显示所有内容? 列填充整个区域,而不仅仅是straight line上方。 例:

最佳resize和/或裁剪逻辑

我曾经遇到过这几次,并认为把它放在那里会很好。 什么是你最好的图像resize和/或裁剪逻辑。 想法是使用目标图像,尺寸和裁剪标记调用某些方法 – 这将返回或保存或任何所需图像。 我的下面。 从VB转换为C#所以是的,会有小错误,但逻辑是我们正在看的。 // INIT // On/off bool WeAreCropping = true; // Get some dimensions int TargetWidth = RequestedWidth; int TargetHeight = RequestedHeight; int SourceWidth = SourceImage.Width; int SourceHeight = SourceImage.Height; int ResizeWidth = TargetWidth; int ResizeHeight = TargetHeight; // GET RESIZE VALUES // Are we cropping? if (WeAreCropping) { // […]

并发文件写入

如何写入可由多个源访问的文本文件(可能以并发方式),确保没有写入操作丢失? 就像,如果两个不同的进程在同一时刻写入文件,这可能会导致问题。 简单的解决方案(不是非常快速而且不是非常优雅)将在开始进程(创建.lock文件或类似文件)时锁定文件并在写入完成时释放它(删除锁定)。 当开始写时,我会检查.lock文件是否存在并延迟写入直到文件被释放。 对于这种情况,建议的模式是什么? 谢谢 编辑我的意思是进程,如来自不同客户端的不同程序,不同用户等,而不是同一程序中的线程

如何让LINQPad转到Dump()系统.__ ComObject引用?

我正在使用LINQPad来快速开发小型ArcObjects (一个基于COM的ESRI ArcGIS软件库)应用程序,并且已经成功地将它用于Dump()我从.NET初始化的COM对象的属性,但是从现有COM对象获取的COM对象只是作为System.__ComObject引用转储,这不是特别有用: 这个帮助主题解释了为什么会发生这种情况,我认为我理解,但是想知道解决这种行为有哪些选择,特别是在使LINQPad(甚至)更强大的环境中。 有趣的是,Visual Studio的调试器能够显示这些对象的属性,甚至是值类型的值: Visual Studio使用什么机制来实现这种内省,为什么LINQPad的Dump方法不会这样做呢? 编辑:请参阅有关VS如何执行此操作的相关问题: Visual Studio的调试器/交互式窗口如何在.NET中转储COM对象的属性? ArcObjects .NET SDK包含带有RCW的PIA,每个CoClass可以通过COM接口实现,所以我认为应该可以以编程方式包装这些对象。 作为一种解决方法,我在LINQ查询中成功使用Marshal.CreateWrapperOfType()来强制LINQPad在我碰巧知道应该使用哪个CoClass时转储对象的属性。 当然,这只能正确转储值类型属性 – 任何基于COM的引用类型属性仍然报告为System.__ComObject ,因此正确的解决方案必须以递归方式工作以获取那些包装。 在之前的一个问题中,我了解到CoClass可以在运行时确定它是否实现了IPersist ,这是ArcObjects的很大一部分。 我可以以某种方式使用这种技术或其他技术自动将System.__ComObject从PIA System.__ComObject为适当的RCW吗? 如果是这样,我如何在LINQPad中实现它,例如通过提供ICustomMemberProvider实现? 这可以是递归的,这样也可以包装也是COM对象的属性吗? 我正在使用面向.NET 4.0的LINQPad 4.x,但我也对支持LINQPad 2.x感兴趣(因此,首选适用于.NET 3.5和.NET 4.0的解决方案,但这不是必需的)。 更新:我已经弄清楚我的问题的第一部分是如何使用IPersist.GetClassID返回的CLSID在其RCW中包装System.__ComObject 。 请参阅此相关问题和我正在使用的代码的答案 。 我仍然想知道如何将其用于LINQPad的Dump方法。

C#在尝试打印文档时阻止Adobe Reader窗口出现

由于我无法立即进入的原因,我需要在尝试打印文档时阻止Adobe Reader窗口打开。 在我之前处理这个问题的开发人员设置了以下标志,虽然我不确定他们是为了什么 – if (RegistryManager.GetAcrobatVersion() >= 9.0f) printerArg = “\”” + printerName + “\””; else printerArg = printerName; Process myProc = new Process(); myProc.StartInfo.FileName = fileName; myProc.StartInfo.Verb = “printto”; myProc.StartInfo.UseShellExecute = true; myProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; myProc.StartInfo.CreateNoWindow = true; myProc.StartInfo.Arguments = “\”” + printerName + “\””; bool result = myProc.Start(); if (myProc.WaitForInputIdle()) { if (!myProc.HasExited) […]

如何检索程序集的限定类型名称?

如何生成程序集限定类型名称? 例如,在配置成员资格提供程序时,我必须在“type”属性中为“SqlMembershipProvider”(在此示例中,我已从某处复制以下配置)提供程序集限定类型名称。 如何生成该程序集限定类型名称? 是否必须通过检查assembly类型每次手动输入? [更新] : 更简单的PowerShell版本 PS>([System.String]).AssemblyQualifiedName System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089