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

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

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

Re[6]: WPFで、コンテキストメニューに、子項目を追加する


(過去ログ 83 を表示中)

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

■49618 / inTopicNo.1)  WPFで、コンテキストメニューに、子項目を追加する
  
□投稿者/ 初心者 (126回)-(2010/05/11(Tue) 13:44:28)

分類:[C#] 

分類:[C#]

使用言語 C#.NET 

■WPFで、テキストボックスのコンテキストメニューに、edit-copyなどを追加しようとしています。
子項目に追加する方法がわからなかったので、とりあえず、

xaml
<Grid Name="allgrid">
	<Grid.ContextMenu>
		<ContextMenu Name="contextMenu">
			<MenuItem Header="File" Name="File" Click="File_Click" />
		</ContextMenu>
	</Grid.ContextMenu>

	<TextBox Name="textBox">
		<TextBox.ContextMenu>
			<ContextMenu Name="textBoxcontextMenu">
				<MenuItem Header="Edit" Name="edit" Click="edit_Click" />
			</ContextMenu>
		</TextBox.ContextMenu>
	</TextBox>
</Grid>

cs
textBoxcontextMenu.Items.Add(new Separator());
MenuItem copyitem = new MenuItem();
copyitem.Header = "copy";
copyitem.Name="copy";
copyitem.Click += (s,e) => copy_Click(s,e);
contextMenu.Items.Add(copyitem);

これで、TextBoxで右クリックすると
edit
------
copy

と出ると思ったのですが、editしかメニューーが出ません。
できれば、
edit-copy
というようにサブメニューしたいので、その方法を教えてください。
よろしくお願いします。

引用返信 編集キー/
■49620 / inTopicNo.2)  Re[1]: WPFで、コンテキストメニューに、子項目を追加する
□投稿者/ こくぶん (59回)-(2010/05/11(Tue) 14:34:48)
2010/05/11(Tue) 14:35:56 編集(投稿者)
No49618 (初心者 さん) に返信

> contextMenu.Items.Add(copyitem);

単に挿入先を間違えているだけの様な。。。

 textBoxcontextMenu.Items.Add(copyitem);

でいけませんか?


> できれば、
> edit-copy
> というようにサブメニューしたいので、その方法を教えてください。

 ((MenuItem)textBoxcontextMenu.Items[0]).Items.Add(copyitem);

で edit のサブメニューとして copy を追加できます。

## (文言修正)
「子要素」→「サブメニュー」

引用返信 編集キー/
■49622 / inTopicNo.3)  Re[2]: WPFで、コンテキストメニューに、子項目を追加する
□投稿者/ 初心者 (127回)-(2010/05/11(Tue) 14:47:26)
No49620 (こくぶん さん) に返信
早速ありがとうございます。
cs
//textBoxcontextMenu.Items.Add(new Separator());
MenuItem copyitem = new MenuItem();
copyitem.Header = "copy";
copyitem.Name="copy";
copyitem.Click += (s,e) => copy_Click(s,e);
//contextMenu.Items.Add(copyitem);
((MenuItem)textBoxcontextMenu.Items[0]).Items.Add(copyitem);
と変更してみました。
が、依然として、Editは出るものの、Editのサブメニューに、copyが表示されずにおります。

textBoxcontextMenu.Items.Add(copyitem);
もだめでした。
引用返信 編集キー/
■49626 / inTopicNo.4)  Re[3]: WPFで、コンテキストメニューに、子項目を追加する
□投稿者/ こくぶん (60回)-(2010/05/11(Tue) 15:42:02)
No49622 (初心者 さん) に返信
> cs
> //textBoxcontextMenu.Items.Add(new Separator());
> MenuItem copyitem = new MenuItem();
> copyitem.Header = "copy";
> copyitem.Name="copy";
> copyitem.Click += (s,e) => copy_Click(s,e);
> //contextMenu.Items.Add(copyitem);
> ((MenuItem)textBoxcontextMenu.Items[0]).Items.Add(copyitem);
> と変更してみました。
> 依然として、Editは出るものの、Editのサブメニューに、copyが表示されずにおります。


そもそも、上記コードが動いていない……と云うことはないですかね?

# break point を設定する等で、実行されていることは確認できていますでしょうか?


※ちなみに私の環境 (Visual Studio 2008 SP1) で試したところ、以下のコードで
 テキストボックスのコンテキストメニューの "edit" の下に "copy" が追加されました。
 なので、上記コード以外のところに問題がある感じがします。

◆Window1.xaml
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
    <Grid>
        <TextBox Name="TextBox1">
            <TextBox.ContextMenu>
                <ContextMenu Name="TextBoxContextMenu1">
                    <MenuItem Name="edit" Header="edit" />
                </ContextMenu>
            </TextBox.ContextMenu>
        </TextBox>
    </Grid>
</Window>

◆Window1.xaml.cs
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        var copyItem = new MenuItem();
        copyItem.Name = "copy";
        copyItem.Header = "copy";
        TextBoxContextMenu1.Items.Add(copyItem);
    }


また、
>>  TextBoxContextMenu1.Items.Add(copyItem);
の行を
>>  ((MenuItem)TextBoxContextMenu1.Items[0]).Items.Add(copyItem);
に書き換えると、 "edit" のサブメニューに "copy" が追加されました。

引用返信 編集キー/
■49634 / inTopicNo.5)  Re[4]: WPFで、コンテキストメニューに、子項目を追加する
□投稿者/ 初心者 (128回)-(2010/05/11(Tue) 17:22:33)
No49626 (こくぶん さん) に返信
ありがとうございました。
csで、コードの位置を根本的に間違えていました。
Loadedイベントに書くべきところを、メニューを開いたときに実行するのだからと勘違いして、

private void textBoxcontextMenu_Click(object sender, RoutedEventArgs e ){
MenuItem copyitem = new MenuItem();
copyitem.Header = "copy";
copyitem.Name="copy";
copyitem.Click += (s,e) => copy_Click(s,e);
((MenuItem)textBoxcontextMenu.Items[0]).Items.Add(copyitem);
}

と書いていました。これではぜんぜんですね…。

さて、それでメニューはできたのですが、まだ壁に当たっています。
テキストボックスの文字列を選択して、copyを押しても、その文字列を取得できていないようなのです。
senderの内容を見ても、それらしき項目が入っていないんですけど、文字列を入れるには、どうしたらよいのでしょう?

引用返信 編集キー/
■49661 / inTopicNo.6)  Re[5]: WPFで、コンテキストメニューに、子項目を追加する
□投稿者/ こくぶん (61回)-(2010/05/12(Wed) 10:53:33)
No49634 (初心者 さん) に返信
> テキストボックスの文字列を選択して、copyを押しても、その文字列を取得できていないようなのです。
> senderの内容を見ても、それらしき項目が入っていないんですけど、文字列を入れるには、どうしたらよいのでしょう?

copy_Click(sender, e) の sender には MenuItem が設定されるので、 sender からは取りようがないですね。 ^^;


copy_Click メソッド内で textBox の SelectedText プロパティを参照すればOKかと思います。

private void copy_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show(textBox.SelectedText);
}

引用返信 編集キー/
■49662 / inTopicNo.7)  Re[6]: WPFで、コンテキストメニューに、子項目を追加する
□投稿者/ 初心者 (129回)-(2010/05/12(Wed) 13:39:32)
No49661 (こくぶん さん) に返信
ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -