我正在开发一个自动化其他应用程序的应用程序。我希望能够确定"其他"上的文本框元素。申请是否只读。在单行文本框的情况下,MS UI Automation框架提供了ValuePattern,我可以从该模式获得readonly属性,但是当我们有多行文本框时,没有ValuePattern可用,我只能访问TextPattern和ScrollPattern。如何使用MS UI Automation从多行文本框中获取readonly属性?
P.S。我曾尝试在互联网上找到一些相关内容,但似乎没有太多关于MS UI Automation的信息。
答案 0 :(得分:4)
TextPattern
模式提供了一种检查只读状态范围的方法。检查完整的DocumentRange
会告诉您整个文本框是否为只读:
TextPattern textPattern = textProvider.GetCurrentPattern(TextPattern.Pattern) as TextPattern;
object roAttribute = textPattern.DocumentRange.GetAttributeValue(TextPattern.IsReadOnlyAttribute);
if (roAttribute != TextPattern.MixedAttributeValue)
{
bool isReadOnly = (bool)roAttribute;
}
else
{
// Different subranges have different read only statuses
}
答案 1 :(得分:0)
例如,检查textBox2
是否为只读。
检查textBox2
是否为只读的方法:
private bool checkReadOnly(Control Ctrl)
{
bool isReadOnly = false;
if(((TextBox)Ctrl).ReadOnly == true)
{
isReadOnly = true;
}
else
{
isReadOnly = false;
}
return isReadOnly;
}
使用按钮点击事件的方法:
private void button1_Click(object sender, EventArgs e)
{
if (checkReadOnly(textBox2) == true)
{
MessageBox.Show("textbox is readonly");
}
else
{
MessageBox.Show("not read only textbox");
}
}
如果只读或不使用相同的方法检查表单上的所有textboxes
:
private void button2_Click(object sender, EventArgs e)
{
foreach(Control ct in Controls.OfType<TextBox>())
{
if (checkReadOnly(ct) == true)
{
MessageBox.Show(ct.Name + " textbox is readonly");
}
else
{
MessageBox.Show(ct.Name + " not read only textbox");
}
}
}