前提・実現したいこと
お世話になっております。
WPFアプリケーション作成にあたり、削除ボタンを実装しているのですが
削除ボタン押下時に確認ダイアログを表示させたいと思っております。
試したこと
MessageBox.Showを用いて削除コマンドのif文内に、もう一つの指定を行おうとしました。
その際、新たなusingを指定すると以前までのコードでcs0104の
プログラムには2つの名前空間のusingディレクティブが含まれており、コードは両方の名前空間に表示される名前を参照しています。
が起きてしまいきれいな形でエラー解消を実現することができませんでした。
(それぞれどのusingを使用するか指定すればエラー解決は可能)
お聞きしたいこと
- 削除確認ダイアログの実装方針
- 大きなプログラムを書く際に、以前までのコードでかみ合わないエラーが発生する場合どのように対処するのがよいのか。(過去のコードを修正するorうまくいく形を模索する)
該当のソースコード
xaml
1<Window 2 x:Class="Qogxgft0o3rrwcj.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:dd="urn:gong-wpf-dragdrop" 6 xmlns:local="clr-namespace:Qogxgft0o3rrwcj" 7 Width="800" 8 Height="450"> 9 <Window.Resources> 10 <local:ManagerDropHandler x:Key="ManagerDropHandler" /> 11 <Style TargetType="Button"> 12 <Setter Property="Margin" Value="10,5" /> 13 <Setter Property="MinWidth" Value="80" /> 14 </Style> 15 <Style TargetType="GroupBox"> 16 <Setter Property="BorderThickness" Value="0" /> 17 </Style> 18 </Window.Resources> 19 20 <Grid Margin="10"> 21 <Grid.ColumnDefinitions> 22 <ColumnDefinition Width="10*" /> 23 <ColumnDefinition Width="27*" /> 24 </Grid.ColumnDefinitions> 25 26 <DockPanel> 27 <Button 28 Click="OpenButton_Click" 29 Content="開く" 30 DockPanel.Dock="Top" /> 31 <Button 32 Click="SaveAsButton_Click" 33 Content="保存" 34 DockPanel.Dock="Top" /> 35 36 <GroupBox Header="name"> 37 <ListBox 38 x:Name="nameListBox" 39 dd:DragDrop.DropHandler="{StaticResource ManagerDropHandler}" 40 dd:DragDrop.IsDragSource="True" 41 dd:DragDrop.IsDropTarget="True" 42 DisplayMemberPath="name" 43 IsSynchronizedWithCurrentItem="True" 44 ItemsSource="{Binding}" /> 45 </GroupBox> 46 </DockPanel> 47 48 <Grid Grid.Column="1"> 49 <Grid.RowDefinitions> 50 <RowDefinition Height="Auto" /> 51 <RowDefinition /> 52 <RowDefinition Height="Auto" /> 53 </Grid.RowDefinitions> 54 55 <DockPanel> 56 <StackPanel DockPanel.Dock="Right"> 57 <Button Click="Name_NewButton_Click" Content="新規" /> 58 <Button Click="Name_DelButton_Click" Content="削除" /> 59 </StackPanel> 60 <StackPanel> 61 <GroupBox DockPanel.Dock="Top" Header="name"> 62 <TextBox Text="{Binding /name, UpdateSourceTrigger=PropertyChanged}" /> 63 </GroupBox> 64 <GroupBox DockPanel.Dock="Top" Header="URL"> 65 <TextBox Text="{Binding /url, UpdateSourceTrigger=PropertyChanged}" /> 66 </GroupBox> 67 </StackPanel> 68 </DockPanel> 69 70 <GroupBox Grid.Row="1" Header="subname"> 71 <ListBox 72 x:Name="subNameListBox" 73 dd:DragDrop.IsDragSource="True" 74 dd:DragDrop.IsDropTarget="True" 75 DisplayMemberPath="subname" 76 IsSynchronizedWithCurrentItem="True" 77 ItemsSource="{Binding /manager_list}" /> 78 </GroupBox> 79 80 <DockPanel Grid.Row="2"> 81 <StackPanel DockPanel.Dock="Right"> 82 <Button Click="SubName_NewButton_Click" Content="新規" /> 83 <Button Click="SubName_DelButton_Click" Content="削除" /> 84 </StackPanel> 85 86 <StackPanel> 87 <GroupBox Header="subname"> 88 <TextBox Text="{Binding /manager_list/subname, UpdateSourceTrigger=PropertyChanged}" /> 89 </GroupBox> 90 <GroupBox Header="address"> 91 <TextBox Text="{Binding /manager_list/address, UpdateSourceTrigger=PropertyChanged}" /> 92 </GroupBox> 93 </StackPanel> 94 </DockPanel> 95 </Grid> 96 </Grid> 97</Window>
C#
1using System.Collections.ObjectModel; 2using System.IO; 3using System.Windows; 4using GongSolutions.Wpf.DragDrop; 5using GongSolutions.Wpf.DragDrop.Utilities; 6using Microsoft.Win32; 7using Newtonsoft.Json; 8using System.Windows.Forms; 9 10namespace Qogxgft0o3rrwcj 11{ 12 public class Manager 13 { 14 public string subname { get; set; } 15 public string address { get; set; } 16 } 17 18 public class PersonalData 19 { 20 public string name { get; set; } 21 public string url { get; set; } 22 public ObservableCollection<Manager> manager_list { get; set; } 23 } 24 25 public partial class MainWindow : Window 26 { 27 private ObservableCollection<PersonalData> _data = new ObservableCollection<PersonalData>(); 28 29 public MainWindow() 30 { 31 InitializeComponent(); 32 DataContext = _data; 33 34 Dummy(); 35 } 36 37 private void OpenButton_Click(object sender, RoutedEventArgs e) 38 { 39 var dialog = new OpenFileDialog { Filter = "json|*.json", }; 40 if (dialog.ShowDialog() == true) 41 { 42 var json = File.ReadAllText(dialog.FileName); 43 _data = JsonConvert.DeserializeObject<ObservableCollection<PersonalData>>(json); 44 DataContext = _data; 45 } 46 } 47 private void SaveAsButton_Click(object sender, RoutedEventArgs e) 48 { 49 var dialog = new SaveFileDialog { Filter = "json|*.json", }; 50 if (dialog.ShowDialog() == true) 51 { 52 var json = JsonConvert.SerializeObject(_data, Formatting.Indented); 53 File.WriteAllText(dialog.FileName, json); 54 } 55 } 56 57 private void Name_NewButton_Click(object sender, RoutedEventArgs e) 58 { 59 var data = new PersonalData 60 { 61 name = "new name", 62 manager_list = new ObservableCollection<Manager>(), 63 }; 64 _data.Add(data); 65 nameListBox.SelectedItem = data; 66 } 67 private void Name_DelButton_Click(object sender, RoutedEventArgs e) 68 { 69 DialogResult result = MessageBox.Show("msg", "タイトル", MessageBoxButtons.YesNo); 70 if (nameListBox.SelectedItem is PersonalData data) 71 { 72 _data.Remove(data); 73 } 74 } 75 76 private void SubName_NewButton_Click(object sender, RoutedEventArgs e) 77 { 78 if (nameListBox.SelectedItem is PersonalData data) 79 { 80 var manager = new Manager { subname = "new subname", }; 81 data.manager_list.Add(manager); 82 subNameListBox.SelectedItem = manager; 83 } 84 } 85 private void SubName_DelButton_Click(object sender, RoutedEventArgs e) 86 { 87 if (nameListBox.SelectedItem is PersonalData data 88 && subNameListBox.SelectedItem is Manager manager) 89 { 90 data.manager_list.Remove(manager); 91 } 92 } 93 94 95 private void Dummy() 96 { 97 if (File.Exists("test.json")) return; 98 99 var json = @" 100[ 101 { 102 ""name"": ""tora"", 103 ""url"": ""https:tora.com"", 104 ""manager_list"": [ 105 { 106 ""subname"": ""tiger"", 107 ""address"": ""chiba"" 108 }, 109 { 110 ""subname"": ""tiger2"", 111 ""address"": ""tokyo"" 112 } 113 ] 114 }, 115 { 116 ""name"": ""cat"", 117 ""url"": ""https:cat.com"", 118 ""manager_list"": [ 119 { 120 ""subname"": ""neko"", 121 ""address"": ""kanagawa"" 122 }, 123 { 124 ""subname"": ""neko2"", 125 ""address"": ""yokohama"" 126 } 127 ] 128 } 129] 130".Trim(); 131 132 File.WriteAllText("test.json", json); 133 } 134 } 135 136 137 class ManagerDropHandler : DefaultDropHandler 138 { 139 public override void DragOver(IDropInfo dropInfo) 140 { 141 // nameListBox内アイテム並び替え(デフォルト動作) 142 if (dropInfo.Data is PersonalData && dropInfo.TargetItem is PersonalData) 143 { 144 base.DragOver(dropInfo); 145 } 146 // subNameListBox→nameListBox アイテム移動・コピー(Ctrl+ドラッグ) 147 else if (dropInfo.Data is Manager && dropInfo.TargetItem is PersonalData) 148 { 149 var isCopy = dropInfo.KeyStates.HasFlag(DragDropKeyStates.ControlKey); 150 dropInfo.Effects = isCopy ? DragDropEffects.Copy : DragDropEffects.Move; 151 dropInfo.DropTargetAdorner = DropTargetAdorners.Highlight; 152 } 153 } 154 155 public override void Drop(IDropInfo dropInfo) 156 { 157 if (dropInfo?.DragInfo == null) return; 158 159 // nameListBox内アイテム並び替え(デフォルト動作) 160 if (dropInfo.Data is PersonalData && dropInfo.TargetItem is PersonalData) 161 { 162 base.Drop(dropInfo); 163 } 164 // subNameListBox→nameListBox アイテム移動・コピー(Ctrl+ドラッグ) 165 else if (dropInfo.Data is Manager source && dropInfo.TargetItem is PersonalData target) 166 { 167 var sourceList = dropInfo.DragInfo.SourceCollection.TryGetList(); 168 if (dropInfo.Effects == DragDropEffects.Copy) 169 { 170 var copy = new Manager { subname = source.subname, address = source.address, }; 171 target.manager_list.Add(copy); 172 } 173 else if (dropInfo.Effects == DragDropEffects.Move) 174 { 175 sourceList.Remove(source); 176 target.manager_list.Add(source); 177 } 178 } 179 } 180 } 181}

回答1件
あなたの回答
tips
プレビュー