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

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

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

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

0回答

2036閲覧

図形描写後にフォントボックスを貼り付けたい

marche

総合スコア7

C#

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

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/09/27 23:58

現在WPF、言語はC#でアプリケーションを作成しております。
図形描写後に名前を付け、消去する際にはその図形と名前を一括で消したいのですが中々うまくいかない為教えて頂きたくて質問しました。

下記のソースコードは、マウスクリック&ドラッグで円を二つ描き描画後テキストボックスに入力した文字を二つ目の円の場所に貼り付けるものです。
ですが、円のインデックス位置を文字から無理矢理割り出して消去しておりズレが生じるとエラーが生じてしまいます。どのようにすれば良いのでしょうか?

開発環境はvisual studio 2012 for Desktopを使用しております。
宜しくお願いします。

###該当のソースコード

C#

1namespace WpfApplication1 2{ 3 /// <summary> 4 /// MainWindow.xaml の相互作用ロジック 5 /// </summary> 6 public partial class MainWindow : Window 7 { 8 double x1 = 0; // 旗始点(x) 9 double y1 = 0; // 旗始点(y) 10 double x2 = 0; // 旗終点(x) 11 double y2 = 0; // 旗終点(y) 12 bool flag = true; // 旗描画モード切替 13 bool flag2 = true; // 旗消去モード切替 14 bool flag3 = true; 15 int counter = 0; 16 int counter2 = 0; 17 18 SolidColorBrush BlackBrush = new SolidColorBrush(Colors.Black); 19 SolidColorBrush RedBrush = new SolidColorBrush(Colors.Red); 20 21 public MainWindow() 22 { 23 InitializeComponent(); 24 canvas.EditingMode = InkCanvasEditingMode.None; 25 BlackBrush.Freeze(); 26 RedBrush.Freeze(); 27 } 28 29 // 図形描画モード 30 private void button_Click(object sender, RoutedEventArgs e) 31 { 32 flag = false; 33 flag2 = true; 34 canvas.EditingMode = InkCanvasEditingMode.None; 35 } 36 37 // マウスクリック位置(押したとき)取得 38 private void Root_MouseDown(object sender, MouseButtonEventArgs e) 39 { 40 if (flag == false) 41 { 42 System.Windows.Point pos1 = e.GetPosition(canvas); 43 x1 = pos1.X; 44 y1 = pos1.Y; 45 46 textBox1.Text = null; 47 } 48 } 49 50 // マウスクリック位置(離したとき)取得 51 private void Root_MouseUp(object sender, MouseButtonEventArgs e) 52 { 53 if (flag == false) 54 { 55 System.Windows.Point pos2 = e.GetPosition(canvas); 56 x2 = pos2.X; 57 y2 = pos2.Y; 58 59 CreateElipse(); 60 } 61 } 62 63 // 描画 64 public void CreateElipse() 65 { 66 EllipseGeometry ellipse1 = new EllipseGeometry(); 67 System.Windows.Shapes.Path P1 = new System.Windows.Shapes.Path(); 68 69 EllipseGeometry ellipse2 = new EllipseGeometry(); 70 System.Windows.Shapes.Path P2 = new System.Windows.Shapes.Path(); 71 72 ellipse1.Center = new System.Windows.Point(x1, y1); 73 ellipse1.RadiusX = 1; 74 ellipse1.RadiusY = 1; 75 76 ellipse2.Center = new System.Windows.Point(x2, y2); 77 ellipse2.RadiusX = 3; 78 ellipse2.RadiusY = 3; 79 80 if (tgBtn.IsChecked == true && tgBtn2.IsChecked == false) 81 { 82 // 消去処理 83 P1.MouseDown += (sender, e) => 84 { 85 if (flag2 == false) 86 { 87 canvas.Children.Remove(P1); 88 canvas2.Children.Remove(P2); 89 } 90 }; 91 } 92 93 if (tgBtn2.IsChecked == false) 94 { 95 // 円設定 96 P1.Fill = RedBrush; 97 P1.Stroke = RedBrush; 98 P1.StrokeThickness = 1; 99 P1.Data = ellipse1; 100 101 P2.Fill = RedBrush; 102 P2.Stroke = RedBrush; 103 P2.StrokeThickness = 3; 104 P2.Data = ellipse2; 105 106 counter2 = canvas.Children.Capacity; 107 108 if (counter2 == 0) 109 { 110 canvas.Children.Add(P1); 111 canvas2.Children.Add(P2); 112 textBox1.Text = null; 113 flag3 = false; 114 } 115 else 116 { 117 if (tgBtn.IsChecked == false && tgBtn3.IsChecked == false && flag3 == true) 118 { 119 MessageBox.Show("文字が記入されていません\n(文字記入後消去してください)"); 120 } 121 else 122 { 123 canvas.Children.Add(P1); 124 canvas2.Children.Add(P2); 125 126 textBox1.Text = null; 127 tgBtn3.IsChecked = false; 128 flag3 = false; 129 } 130 } 131 } 132 } 133 134 private void textBox1_LostFocus(object sender, RoutedEventArgs e) 135 { 136 if (flag == true) 137 { 138 } 139 else 140 { 141 TextBlock tblock2 = new TextBlock(); 142 143 SolidColorBrush Brush2 = new SolidColorBrush(Colors.Transparent); 144 Brush2.Freeze(); 145 146 tblock2.Background = Brush2; 147 148 149 Binding bind3 = new Binding(); 150 bind3.ElementName = "textBox1"; 151 bind3.Path = new PropertyPath(TextBox.TextProperty); 152 //bind3.UpdateSourceTrigger = UpdateSourceTrigger.Explicit; 153 bind3.Mode = BindingMode.OneTime; 154 tblock2.SetBinding(TextBlock.TextProperty, bind3); 155 156 if (tgBtn2.IsChecked == true && tgBtn.IsChecked == false) 157 { 158 tblock2.MouseDown += (sender2, e2) => 159 { 160 if (flag2 == false) 161 { 162 canvas.Children.Remove(tblock2); 163 } 164 }; 165 } 166 167 if (tgBtn.IsChecked == false) 168 { 169 if (tgBtn2.IsChecked == false) 170 { 171 // 消去処理 172 tblock2.MouseDown += (sender2, e2) => 173 { 174 if (flag2 == false) 175 { 176 counter = canvas.Children.IndexOf(tblock2); 177 178 if (counter == 1) 179 { 180 canvas.Children.Remove(tblock2); 181 canvas.Children.RemoveAt(counter - 1); 182 canvas2.Children.RemoveAt(counter - 1); 183 } 184 else 185 { 186 MessageBox.Show(counter.ToString()); 187 MessageBox.Show((counter - 1).ToString()); 188 MessageBox.Show(((counter - 1) - ((counter - 1) / 2)).ToString()); 189 190 canvas.Children.Remove(tblock2); 191 canvas.Children.RemoveAt(counter - 1); 192 canvas2.Children.RemoveAt((counter - 1) - ((counter - 1) / 2)); 193 } 194 } 195 }; 196 197 tblock2.SetValue(InkCanvas.TopProperty, y2); 198 tblock2.SetValue(InkCanvas.LeftProperty, x2); 199 } 200 // 文字だけモード 201 else 202 { 203 tblock2.SetValue(InkCanvas.TopProperty, y1); 204 tblock2.SetValue(InkCanvas.LeftProperty, x1); 205 } 206 } 207 208 tblock2.Foreground = BlackBrush; 209 210 if (tblock2.Text != null && tgBtn.IsChecked == false) 211 { 212 canvas.Children.Add(tblock2); 213 tgBtn3.IsChecked = true; 214 } 215 } 216 } 217 218 // 消去モード 219 private void button2_Click(object sender, RoutedEventArgs e) 220 { 221 flag2 = false; 222 flag = true; 223 224 canvas.EditingMode = InkCanvasEditingMode.None; 225 } 226 } 227}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問