C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 一部コントロールでAutomationIDが取得出来ない


(過去ログ 132 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■77619 / inTopicNo.1)  一部コントロールでAutomationIDが取得出来ない
  
□投稿者/ aga (6回)-(2015/11/09(Mon) 09:56:21)

分類:[C#] 

いつもお世話になっております。

メニュー内項目等のAutomationID取得について質問させてください。

使用言語:C#
開発環境:Visual Studio 2012

現在、WinFormで作成したexeのコントロールを、AutomationElementを用いて外部から実行するテスト用ツールを作成しています。

非WPFのコントロールでも、フォームに貼り付けたボタンやチェックボックスからAutomationIDを取得するとコントロール名が取得でき、それを使って実行できるところまでは確認しました。

しかし、メニュー(ToolStripMenu)内の項目や、DataGridViewの各項目(何行目の何列目)からはAutomationIDが取得できませんでした。

メニュー内の項目やDataGridViewから個別にAutomationIDを取得するには、フォームに貼り付けてあるコントロールとは方法が異なるということでしょうか。
方法が異なる場合、どのように行うべきでしょうか。
どなたかご教授をお願いします。
引用返信 編集キー/
■77636 / inTopicNo.2)  Re[1]: 一部コントロールでAutomationIDが取得出来ない
□投稿者/ Azulean (536回)-(2015/11/09(Mon) 22:13:15)
試していませんが、2006 年の古い記事によると、実装されていない(サポートされていない)から、自分で実装しろという主旨が書かれていました。
https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/f314c0bb-4fd4-489f-b36d-fee3980fa8b0/menustrip-is-still-missing-from-uispy

// 今、どうなっているかまでは実験していませんが。

DataGridView は特殊なコントロールなので、それに対応する Automation なクラスの実装が提供されているか、自分で実装しない限り、難しいかもしれません。
引用返信 編集キー/
■78026 / inTopicNo.3)  Re[1]: 一部コントロールでAutomationIDが取得出来ない
□投稿者/ ゆーすけ (1回)-(2015/12/08(Tue) 15:36:52)
ゆーすけ さんの Web サイト
No77619 (aga さん) に返信
> しかし、メニュー(ToolStripMenu)内の項目や、DataGridViewの各項目(何行目の何列目)からはAutomationIDが取得できませんでした。
> メニュー内の項目やDataGridViewから個別にAutomationIDを取得するには、フォームに貼り付けてあるコントロールとは方法が異なるということでしょうか。

DataGridView自体はAutomationIDを持っていますが、各セルはAutomationIDを持ちません。
通常の作法としては、DataGridViewのプロキシを作るべく、GridPatternやTablePatternを適用できないかと考えるのですが、
残念ながらWinForms用のDataGridViewに相当するPatternは提供されていません。

私の場合、スマートではないですが、Nameプロパティを使うことにしました。
セルのNameプロパティは、"(列の表示名) 行 (行)"というパターンで命名されています。
表記が分かりにくいので具体的に言うと、「氏名」列の1行目(ヘッダー除く)のセルは"氏名 行 0"というNameを持ちます。

そこで、DataGridViewのAutomationElementまで取得して、その子をFindAll(TreeScope.Descendants)して、
全てのセルのNameを正規表現などで調べ上げます。

適当なDataGridViewを作って、UISpy.exeで見てみると分かると思います。

ちなみに、ここで「行」は漢字ですが、おそらくカルチャの設定によって英語の"Row"になったり漢字の"行"になったりすると思います。
http://smdn.jp/programming/netfx/locale/0_abstract/

引用返信 編集キー/
■78036 / inTopicNo.4)  Re[2]: 一部コントロールでAutomationIDが取得出来ない
□投稿者/ aga (10回)-(2015/12/09(Wed) 10:21:33)
No78026 (ゆーすけ さん) に返信
> セルのNameプロパティは、"(列の表示名) 行 (行)"というパターンで命名されています。
> 表記が分かりにくいので具体的に言うと、「氏名」列の1行目(ヘッダー除く)のセルは"氏名 行 0"というNameを持ちます。
>
> そこで、DataGridViewのAutomationElementまで取得して、その子をFindAll(TreeScope.Descendants)して、
> 全てのセルのNameを正規表現などで調べ上げます。
>

なるほど、そのような方法もあるのですね。
この方法を試してみたところ、やりたかったこと自体はできるようになりました。
教えていただき、ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -