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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

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

Q&A

解決済

2回答

1853閲覧

if文でRemoveが機能しない

natume4948

総合スコア9

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

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

0グッド

0クリップ

投稿2021/04/09 00:58

編集2021/04/09 02:57

イメージ説明### 前提・実現したいこと
ここに質問の内容を詳しく書いてください。
visual studioでwindows formsを使って追加処理、削除処理、自動削除処理を実行したいと思っております。
ここでいう自動削除処理は一番古い順番から削除するという機能です。
条件としては追加ボタンを押しているときに自動削除ボタンを押し実行すると削除されるという仕組みにしたいです。
前提
・追加処理はできました。
・自動処理はできました。
・空白では追加できないようになりました。
実行したいこと
・削除処理をRemoveメソッドを使ってcomboBox1.Itemsを消すような処理を行ったが返ってこない。
■■な機能を実装中に以下のエラーメッセージが発生しました。
エラー文
'Add'はメソッドグループであるため、割り当てることはできません。

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace WinFormsApp4 12{ 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 21 private void groupBox1_Enter(object sender, EventArgs e) 22 { 23 24 } 25 //ここでテキスト追加 26 private void textBox1_TextChanged(object sender, EventArgs e) 27 { 28 29 } 30 //自動削除ボタン 31 private void checkBox1_CheckedChanged(object sender, EventArgs e) 32 { 33 //削除ボタンと一緒には押せない 34 if(checkBox1.Checked && radioButton2.Checked) 35 { 36 checkBox1.Checked = false; 37 } 38 } 39 // 追加ボタン 40 public void radioButton1_CheckedChanged(object sender, EventArgs e) 41 { 42 43 } 44 // 削除ボタン 45 public void radioButton2_CheckedChanged(object sender, EventArgs e) 46 { 47 } 48 //最終更新日時 49 private void label1_Click(object sender, EventArgs e) 50 { 51 52 53 } 54 //実行ボタン 55 private void button1_Click(object sender, EventArgs e) 56 { 57 58 59 // 実行ボタンを押すたびに実行される 60 DateTime d = DateTime.Now; 61 label1.Text = "最終更新日時:" +d.Hour + ":" + d.Minute + ":" + d.Second; 62 63 //テキスト文 64 var input = textBox1.Text; 65 //追加された文章 66 var total = comboBox1.Items; 67 //追加ボタンと自動削除ボタンを押した場合 68 if (radioButton1.Checked && checkBox1.Checked) 69 { 70 //実行したときに古い順から削除される 71 total.Remove(total[0]); 72 73 74 } 75 // 削除ボタンを押した場合 76 else if (radioButton2.Checked) 77 { 78 //新しい順から削除される 79 total.Remove(total); 80 } 81 //何も帰らない処理 82 else if (radioButton1.Checked && input == "") 83 { 84 85 86 } else if (radioButton1.Checked) 87 { 88 //格納場所に追加される 89 total.Add(input); 90 } 91 92 //5件を超えた場合 93 if(total.Count >= 5) 94 { 95 //これ以上追加させない 96 total.Add = false;<-ここでエラー文が出ます。 97 //メッセージを表示する 98 MessageBox.Show("追加できるのは5件までです"); 99 } 100 //自動削除・削除でこれ以上削除できない場合 101 else if(total.Count < 0) 102 { 103 104 MessageBox.Show("削除するものがありません"); 105 } 106 107 } 108 //格納場所 109 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 110 { 111 //何も表示されていない状態 112 comboBox1.SelectedIndex = -1; 113 114 115 } 116 } 117} 118

試したこと

if文で追加ボタンと自動削除ボタンを押すこと条件式に入れたが何も返ってこない

補足情報(FW/ツールのバージョンなど)

visual studio 2019
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

デバッガの使い方を学習するのをお勧めします。
超初心者でもわかるデバッグ方法

ブレークポイントを利用してプログラムの実行を一時停止して変数の中身を確認したりして、自分が思っている値になっているかなど確認してください。
ステップ実行すれば、ご自身が作成したプログラムがどのように動作しているか確認することもできます。

こういったデバッグ方法は基本的なことで重要なのでぜひ覚えてください。

また、質問のソースには他の人が分かるようにコメントを入れることをお勧めします。
例えば質問には「追加ボタン」と「自動削除ボタン」の2つのボタンと思われる単語が出てきていますが、ソース上にはボタンと思われるものは「button1」の1つだけです。
button1_Clickのイベントハンドラに「追加ボタン」と「自動削除ボタン」の2つのボタンのクリックイベント共通のイベントハンドラにしているのかもしれませんが、見る側には分かりません。
またエラーが出ているのであれば、「ここでこういうエラーが出ます」みたいな形でコメントを入れると他の人に伝わりやすいです。

実行したいこと
・削除処理が機能しない
・自動削除処理が機能しない
・空白では追加できないようにしたい

とありますが、現状すべきことはボタンが押された時に処理が呼ばれているのか、呼ばれているのであればステップ実行しながら各変数がどのような値になっていてif文でどのように判断されているかを確認することです。
また、Removeする時に削除したい項目なのかも確認すべきです。


追記

自動削除チェックボックスにチェックを入れた後に削除を選んだら削除と自動削除の両方となりますがいいのですか?
自動削除にチェックをつけて追加を選んで実行ボタンを押した場合、ComboBoxの1番目の項目は削除されるが新しい項目の追加は行われませんがいいのですか?

C#

1total.Remove(total);

Removeの引数はComboBox.ObjectCollection.Remove(Object) メソッドにあるように削除する項目を指定します。
comboBox1.Itemsではなく削除する項目を指定しましょう。
もし「削除」という機能が全件削除なのであれば、ComboBox.ObjectCollection.Clear メソッドを利用しましょう。

ぱっとソースを見た感じif~elseif~で判断すべきなのか複数のif文で判断すべきなのかの切り分けが出来ていないように思えます。

投稿2021/04/09 01:40

編集2021/04/09 03:36
YAmaGNZ

総合スコア10489

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

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

natume4948

2021/04/09 01:45

ご回答ありがとうございます。 申し訳ございませんでした。今すぐ修正させてもらいます。
guest

0

何とかやりたいことはやれるようになりました。あとは自動削除ボタンの条件式を整えようと思いました。
終わるまでは、未解決にしておきます。

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace WinFormsApp4 12{ 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 21 private void groupBox1_Enter(object sender, EventArgs e) 22 { 23 24 } 25 //ここでテキスト追加 26 private void textBox1_TextChanged(object sender, EventArgs e) 27 { 28 29 } 30 //自動削除ボタン 31 private void checkBox1_CheckedChanged(object sender, EventArgs e) 32 { 33 //削除ボタンと一緒には押せない 34 if(checkBox1.Checked && radioButton2.Checked) 35 { 36 checkBox1.Checked = false; 37 } 38 } 39 // 追加ボタン 40 public void radioButton1_CheckedChanged(object sender, EventArgs e) 41 { 42 43 } 44 // 削除ボタン 45 public void radioButton2_CheckedChanged(object sender, EventArgs e) 46 { 47 } 48 //最終更新日時 49 private void label1_Click(object sender, EventArgs e) 50 { 51 52 53 } 54 //実行ボタン 55 private void button1_Click(object sender, EventArgs e) 56 { 57 58 59 // 実行ボタンを押すたびに実行される 60 DateTime d = DateTime.Now; 61 label1.Text = "最終更新日時:" +d.Hour + ":" + d.Minute + ":" + d.Second; 62 63 //テキスト文 64 var input = textBox1.Text; 65 //追加された文章 66 var total = comboBox1.Items; 67 //int index = comboBox1.SelectedIndex = 4; 68 //string text = comboBox1.Items[index].ToString(); 69 70 71 //追加ボタンと自動削除ボタンを押した場合 72 if (radioButton1.Checked && checkBox1.Checked) 73 { 74 //実行したときに古い順から削除される 75 76 total.Remove(total[0]); 77 78 79 } 80 // 削除ボタンを押した場合 81 else if (radioButton2.Checked) 82 { 83 //新しい順から削除される 84 if(total.Count != 0) 85 { 86 total.RemoveAt(total.Count - 1); 87 } 88 89 } 90 //何も帰らない処理 91 else if (radioButton1.Checked && input == "") 92 { 93 94 95 } else if (radioButton1.Checked) 96 { 97 //格納場所に追加される 98 total.Add(input); 99 } 100 101 102 //5件を超えた場合 103 if(total.Count >= 5) 104 { 105 //これ以上追加させない 106 //total = false; 107 //メッセージを表示する 108 MessageBox.Show("追加できるのは5件までです"); 109 } 110 //自動削除・削除でこれ以上削除できない場合 111 else if(total.Count == -1) 112 { 113 114 MessageBox.Show("削除するものがありません"); 115 } 116 117 118 } 119 //格納場所 120 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 121 { 122 //何も表示されていない状態 123 comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; 124 comboBox1.SelectedIndex = -1; 125 126 127 } 128 } 129}

投稿2021/04/09 04:25

natume4948

総合スコア9

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

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

退会済みユーザー

退会済みユーザー

2021/04/14 23:26

回答が参考になって解決にたどり着いたのなら回答をベストアンサーとしましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問