質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

1748閲覧

拡張メソッドをControlに追加したい

ExcelVBAer

総合スコア1175

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

2グッド

0クリップ

投稿2020/11/01 06:24

編集2020/11/01 09:02

フォームのコントロール(Button,TextBox,...etc)に、
Right, Bottom のプロパティを追加したく、
以下のように拡張メソッドを定義してみたのですが、
試してみても出てこず...

String型には拡張メソッドを追加できてるのですが、
Controlには追加できないのでしょうか??
どこか間違えてるのでしょうか??

先輩方のお知恵を拝借したく、
どうぞよろしくお願いいたしますm(_ _)m

<追記1>
すみません。拡張メソッドは必要ありませんでした。m(_ _)m
ただ、Controlに備わってる Right プロパティが、
インテリセンスに出てこないという状態です。

VisualStudio2019(Communities)で、VB.netを使ってます。
何かご存知の方は、少しでも情報頂けると嬉しいです。
どうぞ宜しくお願い致します。

■■■■■■■■ 最終的な解決方法 ■■■■■■■■
インテリセンスに非表示メンバー([Control].Right,Bottom等)を表示させたい場合

①ツール→設定のエクスポート

②①でエクスポートした設定ファイルを編集
("HideAdvancedMembers">false → "HideAdvancedMembers">true)

③②の設定ファイルをインポート(VSの再起動は不要)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

VB.net

1 2 ' 拡張メソッド 3 <System.Runtime.CompilerServices.Extension()> 4 Public Function Right(ByVal Ext As System.Windows.Forms.Control) As Integer 5 Return Ext.Left + Ext.Width 6 End Function 7 8 Private Function fnc() 9 10 Dim Ctrl As System.Windows.Forms.Control 11 12 End Function
TN8001, vann_2921👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Automatic9045

2020/11/01 06:47

拡張メソッドを追加「出来ない」とのことなのでどこかしらでコンパイルエラーか例外が出ているのだと思うのですが、それについて追記していただけますか?
YAmaGNZ

2020/11/01 07:12 編集

開発環境やFrameworkのバージョンはどのようになっていますか? ControlクラスにはRightプロパティが存在しますが例としてRightメソッドを拡張しようとしているのでしょうか?
ExcelVBAer

2020/11/01 07:18

説明不足ですみません。 コンパイルエラーが出ている訳ではないです。 上記の様に定義しても、 [Conctrol].Right がインテリセンスで出てこないという状態でした。 今気付いたのですが、元からRightあったんですね(汗) 拡張メソッドは必要なく、 インテリセンスが出てこない状態が問題のようです...
YAmaGNZ

2020/11/01 07:20

拡張する元のものに同名のメソッドが存在する場合はコンパイルエラーとはならずに無視されます。
ExcelVBAer

2020/11/01 07:23

なるほど!ありがとうございます!! 無視されちゃうんですね(汗)
guest

回答1

0

ベストアンサー

コードは何も問題ありません。
しいて言えばCtrlがNewされていないです。

拡張メソッドが入力候補に出てくるかどうかはIntelliSenseの問題かと思われます。
どの環境で行われているかは分かりませんが、Visual Studio を再起動してみてはどうですか?

投稿2020/11/01 07:11

vann_2921

総合スコア190

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/11/01 07:16

例ではないとすれば「Right」という拡張メソッドの名前も関係するかと思います。 質問者さんがどのように確認されているのか記載してないので分かりませんが System.Windows.Forms.Controlには「Right」というプロパティが定義されているので拡張メソッドの「Right」が無視されて実行されていないのではないかと思います。
ExcelVBAer

2020/11/01 07:22

お二人ともありがとうございます。 確かに拡張メソッドの名前を変えたらインテリセンスに出てきました! そして元から定義されてる「Right」が何故か出てこない状態です(T_T)
vann_2921

2020/11/01 07:30

私はVisual Studio 2019 を使っていますが、確かにRightプロパティは候補に出てこないですね。 でもプロパティとして存在はしているので使えるみたいです。
ExcelVBAer

2020/11/01 07:34

ありがとうございます! 自分は2019Communityを使ってます。 新規PJでもRightは出てこず、ハマってました(汗)
vann_2921

2020/11/01 07:40

蛇足ですが、私の経験的にインテリセンスに頼りすぎるのはよくないと思います。 まずは、マイクロソフトのドキュメントでクラスにどんなプロパティやメソッドがあるのか調べたほうがいいです。System.Windows.Forms.Controlとかで検索すると出てきます。 意外と知らないメソッドやプロパティが見つかるので勉強になると思います。
ExcelVBAer

2020/11/01 07:43

なるほど。 出ないのがあるかもってことですね。DotNetでもあるんですね(汗) 最近やり始めたとこなので、 少しづつ確認して覚えていこうと思います。 お騒がせしてすみませんでした! ありがとうございます!!
YAmaGNZ

2020/11/01 07:53

リファレンスソースを見てみましたが、Rightプロパティは EditorBrowsable(EditorBrowsableState.Advanced) と定義されています。 なので必ず表示されないということではないで。 実際、当方のVisualStudio2019では表示されています。 オプションでAdvancedと設定されている項目も表示するようなものがあるはずなのですが、もうしわけありませんが、失念しており「これだ」と提示できません。
ExcelVBAer

2020/11/01 07:58

ありがとうございます!! 当方でRightの定義へ移動し、[+]を開くと ↓のようになっていました。 <Browsable(False)> <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> <EditorBrowsable(EditorBrowsableState.Advanced)> <SRCategoryAttribute("CatLayout")> <SRDescriptionAttribute("ControlRightDescr")> この中程にある「<EditorBrowsable(EditorBrowsableState.Advanced)>」の事ですよね。 ちょっと調べてみます!
YAmaGNZ

2020/11/01 08:36

TN8001さんの提示されているURLの情報で切り替えが確認できました。 ただ、オプション画面のVisualBasicの設定部分ではこの項目が無効となっているのでUI上値が変化しているかの確認はできませんでした。
TN8001

2020/11/01 08:47

「HideAdvancedMembers」で検索すると [VB.Net "Hide Advanced Members" is always on · Issue #40497 · dotnet/roslyn](https://github.com/dotnet/roslyn/issues/40497 ["Hide Advanced Members" setting is grayed out for Basic languages, and is reversed from .vssettings value - Developer Community](https://developercommunity.visualstudio.com/content/problem/907696/hide-advanced-members-setting-is-grayed-out-for-ba.html が出たんですが「バグってるのは認識しているがあんまり直す気ないよ」って感じなんでしょうかね?(自動翻訳なので自信ないですが^^;
ExcelVBAer

2020/11/01 08:49

お二方ありがとうございます!! 当方でも、TN8001さん提示先の方法で インテリセンスに非表示メンバーが表示されるようになりました!! ただ、エクスポートした設定の編集方法が "HideAdvancedMembers">false → "HideAdvancedMembers">true で、 文字通りに読むと非表示になりそうなのに、 逆に表示されるんですね(汗) オプション画面だと、 テキストエディタ→Basic→全般→メンバーの詳細を非表示 なのでしょうか?? (合っていれば、確かに非活性で変更不可の状態ですね...) ↓で、Advancedの説明が、高度なユーザーだけが参照すべき...  とあるので、有料版のユーザーなら  オプション画面で調整できるとかですかね?? https://docs.microsoft.com/ja-jp/dotnet/api/system.componentmodel.editorbrowsablestate?view=netcore-3.1
ExcelVBAer

2020/11/01 08:58

TN8001さん ざっくりそんな感じですね(まさかの対応ですが...) 編集内容も, 感覚的には true/false が逆のイメージなので、 すごく混乱しながら おまじない をかけました(笑)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問