- PR -

C#リッチテキストボックスでContextMenuを使いたい

投稿者投稿内容
hirosiです
会議室デビュー日: 2005/01/04
投稿数: 3
投稿日時: 2005-01-04 01:28
C#(VS2005β)のリッチテキストボックスでContextMenuが使用できないのですが、そういうものなのでしょうか?不可解です。それとも何かミスしているのでしょうか?

[ メッセージ編集済み 編集者: hirosiです 編集日時 2005-01-05 12:44 ]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-01-04 09:02
諸農です。

引用:

C#(VS2005β)のリッチテキストボックスでContextMenuが使用できないのですが、そういうものなのでしょうか?不可解です。それとも何かミスしているのでしょうか?



私には、あなたが言われている内容が不可解です。
単に、デザイナで設定できないだけの話ですよね?
コードで設定できませんか?

コード:
private void Form1_Load(object sender, EventArgs e)
{
    MenuItem[] menus = new MenuItem[5];
    for (int i = 0; i < menus.Length; i++)
    {
        string txt = string.Format("Item{0}", i);
        menus[i] = new MenuItem(txt, delegate(object ASender, EventArgs ev) { MessageBox.Show("クリックされたのは" + txt + "です"); });
    }
    richTextBox1.ContextMenu = new ContextMenu(menus);
}



β版を使っているという認識が薄いのではないでしょうか。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
yukitos
会議室デビュー日: 2004/12/09
投稿数: 6
投稿日時: 2005-01-04 15:56
気になったので試してみました。
 RichTextBox + ContextMenuStip
 TextBox + ContextMenuStip
 RichTextBox + ContextMenu
 TextBox + ContextMenu
の4パターンで試しています。

コード:
private void Form1_Load(object sender, EventArgs e)
{
    RichTextBox box1 = new RichTextBox();
    TextBox box2 = new TextBox();
    RichTextBox box3 = new RichTextBox();
    TextBox box4 = new TextBox();
    ContextMenuStrip menu1 = new ContextMenuStrip();
    ToolStripMenuItem item1 = new ToolStripMenuItem();
    ContextMenu menu2 = new ContextMenu();
    MenuItem item2 = new MenuItem();

    item1.Text = "Test1(&T)";
    menu1.Items.Add(item1);
    item2.Text = "Test2(&T)";
    menu2.MenuItems.Add(item2);

    box1.Height = 30;
    box1.ContextMenuStrip = menu1;

    box2.Location = new Point(0, 50);
    box2.ContextMenuStrip = menu1;

    box3.Height = 30;
    box3.Location = new Point(0, 100);
    box3.ContextMenu = menu2;

    box4.Location = new Point(0, 150);
    box4.ContextMenu = menu2;
    this.Controls.AddRange(new Control[] {
        box1,
        box2,
        box3,
        box4
    });
}


この場合、RichTextBox + ContextMenuStrip以外、
RichTextBox + ContextMenuも含めて正常に表示されます。

デザイナで設定できるContextMenuStripを設定していて表示されない、
ということなのでしょうか。
だとすると確かに表示されないですね。
バグなのでしょうか。

# コードが妥当でない等あれば指摘お願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-01-04 17:52
諸農です。

引用:

yukitosさんの書き込み (2005-01-04 15:56) より:
気になったので試してみました。



検証ありがとうございますm(__)m


引用:

この場合、RichTextBox + ContextMenuStrip以外、
RichTextBox + ContextMenuも含めて正常に表示されます。

デザイナで設定できるContextMenuStripを設定していて表示されない、
ということなのでしょうか。
だとすると確かに表示されないですね。
バグなのでしょうか。



インストールディレクトリのreadme.htmの内容である
「Microsoft Visual Studio 2005 Beta 1 リリース ノート」の
2番の項目内容に従って報告された方がいいかと思います。

β版ですのでメーカーのサポートは期待できないと思いますが、
報告によって、製品版で反映されるか、現在の動きが仕様であるのかが
ハッキリするのではないでしょうか。

あと、β版ですので「バグである」というのではなく「未完成である」という
表現が現時点では妥当かと思います。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
yukitos
会議室デビュー日: 2004/12/09
投稿数: 6
投稿日時: 2005-01-04 23:22
yukitosです。
引用:

インストールディレクトリのreadme.htmの内容である
「Microsoft Visual Studio 2005 Beta 1 リリース ノート」の
2番の項目内容に従って報告された方がいいかと思います。


そうですね。後で報告を上げておこうと思います。

引用:

あと、β版ですので「バグである」というのではなく「未完成である」という
表現が現時点では妥当かと思います。


確かに実はひっかかるものはありました…。
指摘ありがとうございます。
hirosiです
会議室デビュー日: 2005/01/04
投稿数: 3
投稿日時: 2005-01-07 12:41
ContextMenuに対する理解が乏しいので上手く表現できませんでしたが、ここ数日色々試して少し分かってきた(ような気がします)ので再度お尋ねします。
1. デザイナでFormにContextMenuのコンポーネントをドロップしただけで TextBox では既定のメニュー項目(コピー、貼り付け、etc)が表示されるようになるのですが、RichTextBox ではそれができないので、行う方法があれば知りたい、ということです。
2. 不可解というのは、同様のコンポーネントなのに何故一方ではできて他方ではできないのか、ということです。(バグにしてはあまりに顕著なので)
yukitos
会議室デビュー日: 2004/12/09
投稿数: 6
投稿日時: 2005-01-10 03:41
引用:

1. デザイナでFormにContextMenuのコンポーネントをドロップしただけで
TextBox では既定のメニュー項目(コピー、貼り付け、etc)が
表示されるようになる


と言われていますが、TextBoxのContextMenuは
ContextMenuをフォームにドロップしなくても表示されますがいかがでしょうか。

RichTextBoxについては、ContextMenuを使うのであれば自前で用意してください、
という仕様のように思います。
なので、RichTextBoxにTextBoxのものと同じような
(コピーや貼り付けなどのメニューを持った)ContextMenuを表示したければ
相応の操作が必要になりそうです。
これについてはまだ調べていないので、すみませんがわかりません。

引用:

2. 不可解というのは、同様のコンポーネントなのに何故一方ではできて
他方ではできないのか、ということです。(バグにしてはあまりに顕著なので)


RichTextBoxでTextBoxと同じContextMenuが表示されない
ということを指してバグと呼ばれているのであれば、
それは誤解だと思います。

なお、2005の方でRichTextBoxにContextMenuStripを設定しても
表示されない件についてはメール報告しておきました。
hirosiです
会議室デビュー日: 2005/01/04
投稿数: 3
投稿日時: 2005-01-10 10:42
ご回答ありがとうございます。
Formアプリを同時進行で2つ作成して、ある時点では、どちらのTextBoxでも既定のContextMenuが表示されなかったので、明示的なContextMenuの追加が必要だと思い、追加作業をしているうちに「いつのまにか」使えるようになったので、前投稿のように解釈しましたが、その後、追加したContextMenuを削除しても使えることが分かりました。

マニュアルによれば、TextBoxもRichTextBoxも"TextBoxBase"のプロパティを継承しているとのことなので、当然ContextMenuもそれに該当すると思っていましたが、yukitosさんのご回答ですっきりしました。

とは言え、入力仕様の統一の為にはTextBoxとRichTextBoxを混在できないということになってしまい、この点はやはり釈然としません。

スキルアップ/キャリアアップ(JOB@IT)