小编Ozz*_*zah的帖子

Windows UI Automation不显示所有子元素?

我的表单上有一个TreeView控件,我以递归方式从窗口本身开始浏览另一个窗口的元素.我用这个来找到元素:

getRecursiveElements(AutomationElement parent)
{
  children = parent.FindAll(TreeScope.Children, Condition.TrueCondition);

  foreach (AutomationElement child in children)
  {
    addToTreeView(child);
    getRecursiveElements(child);
  }
}
Run Code Online (Sandbox Code Playgroud)

一般来说,代码在大多数情况下都能很好地工作.树被填充,我有一些其他支持代码,允许我双击,例如,树视图中的元素,它将突出显示目标表单上的元素.

我遇到的问题是,虽然它生成了一个很棒的树,但某些目标程序仍然缺少一些元素.

可能有什么理由可以解决这个问题,有什么方法可以解决这个问题吗?如果我EnumChildWindows()从user32.dll 调用会有同样的问题吗?

c# windows ui-automation

5
推荐指数
1
解决办法
6167
查看次数

从STDIN读取int时的奇怪行为

假设我们有一个菜单向用户显示一些选项:

Welcome:
1) Do something
2) Do something else
3) Do something cool
4) Quit
Run Code Online (Sandbox Code Playgroud)

用户可以按1 - 4然后按回车键.程序执行此操作,然后将菜单返回给用户.无效选项应该只显示菜单.

我有以下main()方法:

int main()
{
    while (true)
        switch (menu())
        {
            case 1:
                doSomething();
                break;
            case 2:
                doSomethingElse();
                break;
            case 3:
                doSomethingCool();
                break;
            case 4:
                return 0;
            default:
                continue;
        }
}
Run Code Online (Sandbox Code Playgroud)

以下是menu():

int menu()
{
  cout << "Welcome:" << endl
       << "1: Do something" << endl
       << "2: Do something else" << endl
       << "3: Do something cool" << endl …
Run Code Online (Sandbox Code Playgroud)

c++ stdin menu infinite-loop

5
推荐指数
1
解决办法
115
查看次数

.Net Control.Tag - 常见和不寻常的用途

随着我的程序的成长和发展,我一直在发现我的使用Control.Tag越来越多.我不太确定为什么微软把它放在那里,但我发现它非常有用.

我想知道:他们最初的目的是什么?什么被认为是可接受的,什么被认为是禁忌?

根据MSDN,Control.Tag"获取或设置包含控件数据的对象."

在我的日历应用程序中,我存储了Appointment一个AppointmentControl代表的实际对象.我怀疑这是它的预期用途,MSDN上的例子似乎证实了这一点,但我也做了一些不寻常的事情.

例如,当我有一个后退/下一对按钮并且我希望在我们到达开始时被禁用,然后在我们到达结尾时被禁用,那么我将下一个按钮存储在前一个标签中,和下一个标签中的上一个按钮.这样,我总是可以设置((Button)Tag).Enabled = true单击(因为当您向后移动时,显然已禁用的下一个按钮将启用,反之亦然).

此外,我的日历由(视觉上)二维面板阵列组成.我存储DateTime每个面板对应的内容Panel.Tag,当用户放大以查看一天中的时间时,构成每个时隙的面板在其标签中有一个TimeSpan,表示插槽的开始时间.

所以我很好奇:您认为Tag的最常见用途是什么?您使用过或看过的Tag有哪些更不寻常的应用?您是否会考虑将链接对象(如我的后面/下一个按钮示例中)存储为"hacky"?

有些人反对使用标签,暗示他们是旧语言的残余.一个常见的抱怨是,最好简单地扩展一个控件,使其包含一个强类型对象,而不是任何需要在使用时进行转换的对象.你怎么看待这件事?

.net controls

4
推荐指数
1
解决办法
515
查看次数

C#选择ListBox中的所有项目 - 暂停事件处理

请参阅:ListBox选择所有项目

我有一个ListBox,我需要选择所有项目.唯一的问题是,我在ListBox.SelectIndexChanged事件上有事件处理程序,它会做一些CPU密集型的事情.在循环中选择循环中的项会导致程序在循环的每次迭代中触发SelectIndexChanged事件.

我已将循环包含在Suspend/ResumeLayout()中,如下所示:

SuspendLayout();

for (int i = 0; i < listBox.Items.Count; i++)
  listBox.SetSelected(i, true);

ResumeLayout();
Run Code Online (Sandbox Code Playgroud)

但它仍然会触发事件并且仍然需要很长时间来更新选择.

可以用一个简单的布尔标志解决这个问题,当我开始更新时,我会切换,但是如果有一种更简洁的解决方法,那就太棒了.

谢谢.

c# events event-handling winforms

4
推荐指数
1
解决办法
1428
查看次数

CSS将一个div直接放在另一个div上

我有一个div,里面有一些东西,用户可以选择点击'x'来说"这不适用于我",例如.

而不是删除div,我想在它上面播放一个半透明的div.

我从一些复杂的javascript开始,以确定我的div的大小和位置,并在其上创建一个新的.脚本给出的大小和位置看起来与我的眼睛大致相同,但重叠div被放在错误的位置.

然后我意识到(可能)有一种更简单的方法可以做到这一点.

我在div 里面放了一个带有"停电"等级的div,我想要黑掉.停电css类的可见性设置为隐藏,因此javascript将在需要时将其设置为可见.

我遇到的问题是,即使使用这种方法,我也无法让它精确填充父div所具有的矩形.

我有

.blackout
{
  position: absolute;

  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;

  background-color: black;

  opacity: 0.5;
  filter: alpha(opacity = 50);
}
Run Code Online (Sandbox Code Playgroud)

这填满了整个屏幕,而不仅仅是父div.

我需要更改什么才能填充父div?

html javascript css position positioning

4
推荐指数
1
解决办法
4545
查看次数

在没有LINQ的情况下对没有匿名类型的List <object>进行排序

Random r = new Random();
List<object> myList = new List<object>();

for (int i = 0; i < 100; i++)
  myList.Add(new { A = r.Next(), B = r.Next() });

myList.Sort( (obj1, obj2) => obj1.A.CompareTo(obj2.A) );
Run Code Online (Sandbox Code Playgroud)

上面的代码定义了一个泛型List,用100个匿名变量填充它,有两个成员A和B.

假设我想在A上对myList进行排序.最后一行尝试对列表进行排序,但是这段代码显然不能编译,因为编译器不知道对象列表包含什么.

不使用LINQ,是否可以使用lambda或类似方法对此列表进行排序?

c# sorting lambda list

4
推荐指数
1
解决办法
4048
查看次数

C#类似Java的内联类扩展?

我会在谷歌/ MSDN上查看,但我不知道它叫什么,所以我在这里问.

在Java中,我似乎记得你可以做这个非常酷的事情:

Class MyClass
{
  int number;

  MyClass() { }

  void setNumber(int number)
  {
    this.number = number;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后做类似的事情:

MyClass myClass = new MyClass()
  {
    override void setNumber(int Number)
    {
      this.number = 2 * number;
    }
  };
Run Code Online (Sandbox Code Playgroud)

...或者其他的东西.原谅我上面犯的任何错误 - 我在大约6年内没有碰到过Java.

关键是,我记得你可以伪内联一个类.

现在,我需要扩展一个C#WinForms控件,但我只需要使用一次,并且修改非常小.我需要做的就是覆盖CreateParams属性和OnPaint()处理程序.

我的解决方案已经变得越来越大,所有的类都是如此,包含另一个基本上与标准.Net控件相同的类似乎是一种耻辱,只是行为略有不同.

是否可以像在Java中一样在C#中进行内联扩展?如果是这样,怎么样?(它叫什么,所以我可以在MSDN上查找它?)

c# overriding inline

3
推荐指数
1
解决办法
3669
查看次数

在C++中将文本附加到Win32 EditBox

我有一个EditBox HWND tbLog,以及以下函数(不起作用):

void appendLogText(char* newText)
{
  int len = GetWindowTextLength(tbLog);

  char* logText = new char[len + strlen(newText) + 1];
  GetWindowText(tbLog, logText, len);

  strcat(logText, newText);

  SendMessage(tbLog, WM_SETTEXT, NULL, (LPARAM)TEXT(logText));

  delete[] logText;
}
Run Code Online (Sandbox Code Playgroud)

我称之为:

appendLogText("Put something in the Edit box.\r\n");
appendLogText("Put something else in the Edit box.\r\n");
Run Code Online (Sandbox Code Playgroud)

首先,TEXT()实际上做了什么?我曾尝试过/不使用它:(LPARAM)logText而且(LPARAM)TEXT(logText)就我所见,没有任何区别.

第二,我在追加功能中做错了什么?如果我注释掉我的delete行,那么第一次运行append函数时,我的Editbox中会出现垃圾,然后是消息.我第二次运行它,程序崩溃了.如果我没有注释掉它,那么它第一次就会崩溃.

c++ windows winapi

3
推荐指数
1
解决办法
5267
查看次数

在HTML中基于类显示/隐藏行

想象一下,我在HTML中有一个数据表,每个行都有三个可能的类之一:RowA,RowB和RowC; 它代表行中的信息.(例如,小型,中型和大型车).

在桌子上方,我有3个复选框:"Show Small Cars","Show Medium Cars","Show Large Cars".

如果用户取消选择"显示小型汽车",则包含小型汽车的行应该消失.

我就是这样做的:

function showHideRows(classToShowOrHide, checkBoxSender)
{
  var tableObj = document.getElementById("myDataTable");

  for (i = 0; i < tableObj.childNodes.length; i++)
    if (tableObj.childNodes[i].className == classToShowOrHide)
      tableObj.childNodes[i].style.display = checkBoxSender.checked ? "visible" : "none";
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?例如,我可以使用javascript修改css类来包含/排除display: none吗?

我没有使用jQuery.

html javascript css

3
推荐指数
1
解决办法
2万
查看次数

PLINQ AsParallel().ForAll()访问资源

假设我Particle在X,Y空间中有多个s,并且我想将它们全部归一化,使得平均X和Y为0.

串口实施:

public void Normalise()
{
  double avgX = 0.0;
  double avgY = 0.0;

  foreach (Particle p in Particles)
  {
    avgX += p.X;
    avgY += p.Y;
  }

  avgX /= (double)Particles.Count;
  avgY /= (double)Particles.Count;

  foreach (Particle p in Particles)
  {
    p.X -= avgX;
    p.Y -= avgY;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,性能也不错,因为它是O(n),但它是"令人尴尬的平行".看看我的PLINQ实现:

public void PNormalise()
{
  double avgX = 0.0;
  double avgY = 0.0;

  Particles.AsParallel().ForAll(p =>
  {
    avgX += p.X;
    avgY += p.Y;
  });

  avgX /= (double)Particles.Count;
  avgY /= (double)Particles.Count;

  Particles.AsParallel().ForAll(p => …
Run Code Online (Sandbox Code Playgroud)

c# linq multithreading plinq

3
推荐指数
1
解决办法
1131
查看次数