ふらっと C#,C♯,C#(初心者用) Part145at TECH
ふらっと C#,C♯,C#(初心者用) Part145 - 暇つぶし2ch990:デフォルトの名無しさん
19/12/11 22:13:29.51 mMKqVbip0.net
次スレ立てました。
スレリンク(tech板)

991:デフォルトの名無しさん
19/12/11 22:22:20.09 L93wxtPA0.net
>>982
スレたて乙

992:デフォルトの名無しさん
19/12/28 00:46:39.13 oR/9kMuC0.net
めちゃくちゃ初歩的な話で恐縮ですが…
Visual Studio 2019でWPFアプリを作ってみようとして最初の最初でつまづきました
参考にしたURLは↓
C# で WPF を使った Hello World アプリ - Visual Studio | Microsoft Docs
URLリンク(docs.microsoft.com)
1.新プロジェクトを作成(WPF App(.NET Core))
2.ツールボックス > コモンWPFコントロールからTextBlockをデザインサーフェイス上に配置
3.配置したTextBlockを削除
4.再度、ツールボックスからTextBlockを配置
5.このスコープで重複する名前 'textBlock' を登録することはできません。 と言われエラーになる
コントロールの名称を変更すれば良いのだとは思いますが、
表面上は1つ目のコントロールなのにtextBlock2のような名前に変更しなければならないのは気持ちが悪いです
そもそも先に配置したコントロールを削除したのに重複エラーと言われてしまうのがよく解りません
一旦配置してしまうと、削除してもどこかにデータが残ってしまうのでしょうか?

993:デフォルトの名無しさん
19/12/28 09:45:41.95 pvVVcNyyM.net
XAMLを見て必要なら手で直せとしか
WPFのデザイナは貧弱であり、基本的にはデザイナは補助と割り切って手でXAMLを弄る必要があるし、それが認められている
WPFは既にメンテナンスモードに入っており、今後改善される見込みもない
あとWinFormsと異なりWPFではどうしても必要な場合を除きコントロールのNameは指定しないのが基本

994:デフォルトの名無しさん
19/12/28 11:07:45.18 oR/9kMuC0.net
>>985
おっしゃっている"手で直す"とは、どこのことでしょうか?
例として、
1.TextBlockをデザイナに追加
2.TextBlockタグのx:Nameを"textBlock5"に変更
3.TextBlockを削除(マークアップ側のTextBlockタグも消える)
4.再度TextBlockをデザイナに追加(マークアップ側にTextBlockタグが追加される)
5.TextBlockタグのx:Nameを"textBlock5"に変更
6.重複エラー
このようになるのですが、やはり textBlock5 がどこに残っているのか見つけられません
現在のプロジェクトを対象に"textBlock5"を検索してみましたが見つかりませんでした
プロジェクト作成時はxamlが↓のようになっており
<Window x:Class="HelloWPFApp.MainWindow"
中略
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>
コントロールを追加するとGridタグ内にタグが追加されます↓
<Grid>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="159,236,0,0" Text="TextBlock" TextWrapping="Wrap" VerticalAlignment="Top"/>
</Grid>
参考URLのマークアップでは x:Name="textBlock" が記述されていなかったため、その部分を削除したところエラーは消えました
>コントロールのNameは指定しないのが基本
というのは、ここのx:Nameのことでしょうか?
ただ、上記の通り重複している名前がどこに残っているのか解らないため
根本的な解決になっていません

995:デフォルトの名無しさん
19/12/28 11:15:27.00 rkUgfi/c0.net
xaml は xml(テキスト)ファイルだから、テキストエディタで開いてその名前で検索してみれば見つかるんじゃないの。
見つけたら余計な設定があるはずなので、それを読み取って自力で削除すれば。
ってことでは。

996:デフォルトの名無しさん
19/12/28 11:24:05.48 oR/9kMuC0.net
>>987
986の書き方では良くなかったでしょうか
xamlファイルの中身は
<Window x:Class="HelloWPFApp.MainWindow"
中略
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>
となっていて、コントロールを追加するとGridタグ内にタグが追加されます↓
<Grid>
<TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="159,236,0,0" Text="TextBlock" TextWrapping="Wrap" VerticalAlignment="Top"/>
</Grid>
コントロールを削除すると、TextBlockタグも消えます
コントロールの追加/削除で変更があるのはこの行だけです
その後、現在のプロジェクトを対象としてx:Nameに指定してあった値を検索しても見つからなかったんです
xamlファイルをテキストエディタで開き直しても中身は同じです

997:デフォルトの名無しさん
19/12/28 11:31:09.48 iFSWdOZd0.net
>>986
XamlデザイナではC#エディタと違ってどこで重複してるのかまでは教えてくれないね確か
でもエラー箇所は下線が付くはずだからそれで見つけられるはず
x:Name=""やName=""は名指しでのアクセスが必要にならない限りは指定しないのが普通
そのコントロールでのイベントからのアクセスなら、例えば<Button Click="buttonClick" />なら下記のようにsenderをキャストすることによってアクセス出来るので、Name属性はそうそう必要にならないはず
private void buttonClick(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
}

998:デフォルトの名無しさん
19/12/28 14:57:45.16 oR/9kMuC0.net
「x:Name="" は基本的には不要」という話は解りました
何度も書いていますが、デザイナにコントロールを配置した時点で自動生成されるコードにx:Nameが存在しているのであって
私が追記したものではありません
それはそれとして、重複エラーになってしまうことの根本的な解決法が知りたいのです

999:デフォルトの名無しさん
19/12/28 16:10:36.19 oR/9kMuC0.net
自己解決しました
恐らくデザイナに追加した時点でメモリにロードされ
コードを削除してもメモリ上にデータが残っているので重複とされてしまうようです
一旦xamlファイルを閉じ、開き直してからコントロールを追加するとエラーになりませんでした

1000:デフォルトの名無しさん
19/12/28 18:23:00.02 euZyKjoir.net
.VSでのnet coreのWPF対応が全然ダメダメなのに
>新しい開発には .NET Core をお勧めします。
と書いちゃうMSはダメだろ

1001:デフォルトの名無しさん
19/12/28 18:33:26.16 euZyKjoir.net
.net coreのWPF自体が未完成品レベルなのに何で使うのかな

1002:デフォルトの名無しさん
19/12/29 00:55:27.84 wQPPCmQj0.net
>>992-993
既存の開発終えるならそう書くしかなかろう
そんでもってあなたが入門者にMSがそう書いていたら使うでしょう
そもそも既存のWPFが完成品なのかと言われると・・・

1003:デフォルトの名無しさん
19/12/29 02:31:33.81 N0Ta2GQF0.net
立場上、忖度しないといけないから行間読んでくれってことでしょ。

1004:デフォルトの名無しさん
19/12/29 16:24:52.91 KHmi1cQer.net
今のレベルの.net coreのWPFは趣味レベルならいいけど
商売に使うレベルの物じゃない

1005:デフォルトの名無しさん
19/12/29 16:33:44.41 J2Lmqp1KM.net
それを言ったらWPF自体が…
だいたい、既存のWPFアプリケーションをSCDで塩漬けにすることでMSや開発者がメンテから解放されるというのが.NET Core移植の目的なわけで、
そもそも新規に使うもんじゃないんだよ
デザイナなんか本来要らないの

1006:デフォルトの名無しさん
19/12/30 08:29:40.81 GqGnUSog0.net
Windows.FormsのDataGridViewで2カラムのみの状態で、カラム幅をちょうど半分ずつにするには
どうすればよいでしょうか?

1007:デフォルトの名無しさん
19/12/30 09:22:09.70 VA5+g/lT0.net
グリッド幅を2で割ってそれをカラム幅にセットする

1008:デフォルトの名無しさん
19/12/30 09:34:46.49 dvqJbcrW0.net
RowHeader「チッす」

1009:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 83日 13時間 18分 29秒

1010:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch