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

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

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

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

受付中

comboBox.SelectedIndex = -1をしても未選択にならない原因が知りたい

samidare_chan
samidare_chan

総合スコア142

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

1回答

-3評価

0クリップ

458閲覧

投稿2022/05/20 08:00

編集2022/06/22 09:29

提示コードのMainWindow.cs コメント部内部のコードですがcomboBox_extension.SelectedIndex = -1;としても未選択状況にならない原因が知りたいです。

環境

OS: windows10
IDE: visual studio 2022
.Net 6.0

コードの内容

URLを解析してダウンロード可能な拡張子とそのフォーマット形式をリストアップする処理です。

調べたこと

コンソールログを出してコードがそのif文に達しているかどうかを確認
参考サイトを調べてSelectedIndex= -1をすると未選択状況になることを確認

ソースコード全文

https://33.gigafile.nu/0529-c4ec7d1524b533a07b7f9f8a9adf85af0

参考サイト

参考サイト:https://ryoryoyohb.hatenablog.com/entry/2017/09/04/192912
リファレンス: https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.combobox.selectedindex?view=windowsdesktop-6.0&viewFallbackFrom=net-6.0

出力コンソール画面
スレッド 0x36b8 はコード 0 (0x0) で終了しました。 【Hans1126】【MAD】アルストロメリア(ALSTROEMERIA)-アルストロメリア(Alstroemeria)IDOLM@STER SHINY COLORS 偶像大師 閃耀色彩 m4a おおおおおおおお rrrrrrrrr あああああ OH MY GOD ー SHHis あああああ -1 あああああ 【Hans1126】【MAD】アルストロメリア(ALSTROEMERIA)-アルストロメリア(Alstroemeria)IDOLM@STER SHINY COLORS 偶像大師 閃耀色彩 m4a おおおおおおおお rrrrrrrrr あああああ OH MY GOD ー SHHis あああああ -1 あああああ プログラム '[8136] Downloader.exe' はコード 0 (0x0) で終了しました。

イメージ説明
イメージ説明

Data.cs

cs

using System.Diagnostics; namespace Downloader { public enum CodecType { Audio, Movie, Audio_Movie } public struct Format { public string? id; public string? extension; public string? resolution; public string? special_Resolution; //両方あるときは音声 public float? size; public CodecType codecType; } public class Data { private Process process = new Process(); private string url; private string title; private List<Format> format; private string? format_audio = null; private string? format_movie = null; private string? format_extension = null; /* ########################### 初期化 ###########################*/ public Data(string t,string u,List<Format> f) { //省略 title = t; url = u; format = f; } /* ########################### Audioフォーマット取得 ###########################*/ public string? getAudio_Format() { return format_audio; } /* ########################### Movieフォーマット取得 ###########################*/ public string? getMovie_Format() { return format_movie; } /* ########################### 拡張子フォーマット取得 ###########################*/ public string? getExtension_Format() { return format_extension; } /* ########################### Audioフォーマット設定 ###########################*/ public void setAudio_Format(string? a) { format_audio = GetFormatAudio_ID(a); } /* ########################### Movieフォーマット設定 ###########################*/ public void setMovie_Format(string? m) { format_movie = GetFormatMovie_ID(m); } public void Run() { if(format_movie == null) { process.StartInfo.Arguments = " -x " + "ytsearch:" + format_audio + " " + url + " " + " -o \" %(title)s\" "; } process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); process.WaitForExit(); process.CancelOutputRead(); process.CancelErrorRead(); } /* ########################### 出力 ###########################*/ public void Output(object sender, DataReceivedEventArgs e) { Debug.WriteLine(e.Data); } /* ########################### エラー出力 ###########################*/ public void Output_Error(object sender, DataReceivedEventArgs e) { } }; }
MainWindow.cs

cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; using System; using System.IO; namespace Downloader { public partial class MainWindow : Form { List<Data> downloadList = new List<Data>(); Data data; string? url = null; /* ########################### コンストラクタ ###########################*/ public MainWindow() { InitializeComponent(); //ウインドウ初期化 Converter.Init(); //初期化 } /* ########################### URLを入力した時 ###########################*/ private void textBox_url_TextChanged(object sender, EventArgs e) { url = textBox_url.Text; } /* ########################### URLでエンターを押したとき ###########################*/ private void textBox_url_KeyDown(object sender, KeyEventArgs e) { if(e.KeyCode == Keys.Enter) { if((url != null) && (url != "")) { Data data = Converter.GetData(url); if(data == null) { MessageBox.Show("URL ERROR", "", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { downloadList.Add(data); //ダウンロードリストに追加 textBox_url.Text = null; //テキストボックスを空にする checkedListBox_list.Items.Add(data.getTitle(),true); //チェックボックス挿入 } } else { MessageBox.Show("URL NO INPUT", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } /* ########################## 項目リスト再設定 ###########################*/ private void ReSetList(List<Format> list) { //リストをリセット comboBox_extension.Items.Clear(); comboBox_audio.Items.Clear(); comboBox_movie.Items.Clear(); //リスト設定 foreach (Format f in list) { if (f.codecType == CodecType.Audio) { comboBox_audio.Items.Add(f.resolution); //オーディオ } else if (f.codecType == CodecType.Movie) { comboBox_movie.Items.Add(f.resolution); //映像 } comboBox_extension.Items.Add(f.extension); //拡張子 } } /* ########################## ダウンロードリストを選択した時 ###########################*/ private void checkedListBox_list_Click(object sender, EventArgs e) { if(0 <= checkedListBox_list.SelectedIndex) { data = downloadList[checkedListBox_list.SelectedIndex]; ReSetList(data.getFormat()); //項目を再設定 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// Debug.WriteLine(data.getTitle()); Debug.WriteLine(data.getExtension_Format()); if(data.getExtension_Format() == null) { Debug.WriteLine("あああああ"); comboBox_extension.SelectedValue = ""; comboBox_extension.SelectedIndex = -1; Debug.WriteLine(comboBox_extension.SelectedIndex); } else { Debug.WriteLine("おおおおおおおお"); comboBox_extension.SelectedItem = data.getExtension_Format(); } comboBox_audio.SelectedItem = data.getAudio_Format(); comboBox_movie.SelectedItem = data.getMovie_Format(); /////////////////////////////////////////////////////////////////////////////////////////////////////////////// } } /* ########################## オーディオファイル時 項目設定 ###########################*/ private void SetIsAudioFile(string ext) { if (Converter.GetIsAudioExtension(ext) == true) { comboBox_movie.Items.Clear(); comboBox_movie.Items.Add("audio only"); comboBox_movie.SelectedIndex = 0; comboBox_movie.Enabled = false; } else { comboBox_movie.Enabled = true; } } /* ########################## 拡張子リストを選択 ###########################*/ private void comboBox_extension_SelectionChangeCommitted(object sender, EventArgs e) { Data data = downloadList[checkedListBox_list.SelectedIndex]; comboBox_audio.SelectedItem = data.getAudio_Format(); //オーディオを設定 comboBox_movie.SelectedItem = data.getMovie_Format(); //映像を設定 SetIsAudioFile(comboBox_extension.SelectedItem.ToString()); //オーディオファイル時の選択項目設定 data.setExtension_Format(comboBox_extension.SelectedItem.ToString()); //データに設定 } /* ########################## Audioリストを選択 ###########################*/ private void comboBox_audio_SelectionChangeCommitted(object sender, EventArgs e) { data.setAudio_Format(comboBox_audio.SelectedItem.ToString()); //データに設定 } /* ########################## Movieリストを選択 ###########################*/ private void comboBox_movie_SelectionChangeCommitted(object sender, EventArgs e) { data.setMovie_Format(comboBox_movie.SelectedItem.ToString()); //データに設定 } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2022/05/20 09:13 編集

Microsoft のドキュメントに以下のように書いてあります。そのあたりを調べては? SelectedIndex、SelectedValue、および FormattingEnabled は、次のように関連します。 ・FormattingEnabled が false で、SelectedValue が空白の場合、SelectedIndex は -1 に設定されません。 ・FormattingEnabled が true で、SelectedValue が空白の場合、SelectedIndex は -1 に設定されます。 もう一つ「データ バインドされた ComboBox の項目の SelectedIndex は -1 に設定できません」ということも書いてありました。
samidare_chan

2022/05/22 00:24

FormattingEnabled が true で、SelectedValue が空白でデータバインドは文字列なのですがうまく設定されません。これはなぜでしょうか?
SurferOnWww

2022/05/22 00:37

何故でしょうと言われても、あなたが質問に書いた長~い、しかも問題と関係なさそうなものまで多々入っているコードを読む気力は私にはないので分かりません。 今のコードを、問題が再現できる必要最小限のところまで、どんどん削っていくということをやってみましょう。(もちろんバックアップを取るなどしてから) そうする過程で原因が分かって、自己解決できるというのはよくあることです。 分からなくても必要最低限かつそれをコピペすれば動くコードを提示してもらえれば見てみようと思うのですが・・・ 私以外にも見てくれる人がいて、有用な情報がもらえるかもしれません。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。