我正在开发一个应用程序来自动化其他应用程序。我希望能够确定“其他”应用程序上的文本框元素是否是只读的。如果是单行文本框,MS UI 自动化框架提供了 ValuePattern,我可以从该模式中获取只读属性,但是当我们有多行文本框时,没有可用的 ValuePattern,我只能访问 TextPattern 和 ScrollPattern。如何使用 MS UI 自动化从多行文本框中获取只读属性?
PS 我试图在互联网上找到一些关于这个的东西,但似乎没有太多关于 MS UI 自动化的信息。
我正在开发一个应用程序来自动化其他应用程序。我希望能够确定“其他”应用程序上的文本框元素是否是只读的。如果是单行文本框,MS UI 自动化框架提供了 ValuePattern,我可以从该模式中获取只读属性,但是当我们有多行文本框时,没有可用的 ValuePattern,我只能访问 TextPattern 和 ScrollPattern。如何使用 MS UI 自动化从多行文本框中获取只读属性?
PS 我试图在互联网上找到一些关于这个的东西,但似乎没有太多关于 MS UI 自动化的信息。
该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
}
例如检查是否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");
}
}
}