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

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

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

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

Visual Studio

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Windows Forms

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

5回答

1958閲覧

『C#』 labelなどのテキストを、関数の戻り値で設定するときに、元のテキストのままで、変更せずにしたい

JumpActionGames

総合スコア29

C#

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

Visual Studio

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Windows Forms

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2019/12/30 06:39

編集2019/12/30 07:02

『C#』 labelなどのテキストを、関数の戻り値で設定するときに、元のテキストのままで、変更せずにしたい

説明しずらいんですが、、例えば

Dictionary<string,string> b = new Dictionary<string,string>{{"abc","あ"},{"cba","い"}} string a(string c) { return b[c]; }

という関数を作って、
label1.Text = a("abc")
とすると、
label1.Textは"あ"になりますよね。
ですが
label1.Text = a("abcd")
とやると、
エラーが発生してしまいます!
ですが
もし、値が存在しなかったら、label1のテキストを変えないようにしたいです。
ですが、label1.Text = a("hoge") の前に、ifとかを書くのはちょっとコードの長さとかがあれなので、
関数側で判定して、存在しなかったら変更しない
たとえばもとはlabel1.Text = "あいうえお"の状態で、
label1.Text = a("abcd")
としても、
label1.Textは、"あいうえお”のままという感じにしたいです
それで、
label1.Text = a("cba")
だったら、label1.Textは"い"という感じにしたいです。

試したこと

C#

1Dictionary b = new Dictionary(){{"abc","あ"},{"cba","い"}} 2string a(string c) 3{ 4 return b[c]; 5}

を、

C#

1Dictionary b = new Dictionary(){{"abc","あ"},{"cba","い"}} 2string a(string c,Control d) 3{ 4 if(b.ContainsKey("c")) 5 { 6 return b[c]; 7 } 8 else 9 { 10 return d.Text; 11 } 12}

という感じにしましたが、
もし、設定する対象が、コントロール以外だったら、できません!

label.Text = 〇〇; の前に、

C#

1try 2{ 3label.Text = 〇〇; 4} 5catch 6{ 7return; 8}

という感じにしたら、そりゃ対処できますが、
コードが増えてしまいます!!

エラーメッセージ

存在しないKeyを指定したとき

ハンドルされてない例外????
System.Collections.Generic.KeyNotFoundException: '指定されたキーはディレクトリ内に存在しませんでした。'
この例外は、最初にこの呼び出し履歴でスローされました:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
System.Collections.Generic.Dictionary<TKey, TValue>.this[TKey].get(TKey) [名前空間_Test.値の設定メソッド()] の Setting.cs(navigate-to-context:1) [名前空間_Test.Form1.Load(object, System.EventArgs)] の Setting.cs(navigate-to-context:2) System.Windows.Forms.ListControl.OnSelectedValueChanged(System.EventArgs) System.Windows.Forms.Load(object sender, EventArgs e) System.Windows.Forms.Control.ControlNativeWindow.OnMessage(ref System.Windows.Forms.Message) System.Windows.Forms.Control.ControlNativeWindow.WndProc(ref System.Windows.Forms.Message) ... [呼び出し履歴の切り捨て]|||

#使用ツールなど
IDE : Microsoft Visual Studio 2019
OS : Windows10 64bit
言語 : C#
種類 : Windows Forms
フレームワーク : .Net(DotNet) Frameworks

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

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

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

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

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

guest

回答5

0

Dictionaryには、キーがあるかをチェックするContainsKeyというメソッドがあります(MSDN)ので、キーを参照する前にチェックを入れましょう。例外処理をするよりはコンパクトかと思います。

投稿2019/12/30 07:05

編集2019/12/30 07:08
maisumakun

総合スコア145184

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

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

maisumakun

2019/12/30 07:06

> コードが増えてしまいます!! 対応すべきことが増えるのであれば、コードが増えるのは必要なことです。
JumpActionGames

2019/12/30 07:09

試したことにありますが、 >Dictionary b = new Dictionary(){{"abc","あ"},{"cba","い"}} >string a(string c,Control d) >{ > if(b.ContainsKey("c")) > { > return b[c]; > } > else > { > return d.Text; > } >} >という感じにしましたが、 >もし、設定する対象が、コントロール以外だったら、できません!
JumpActionGames

2019/12/30 07:10

でも大量にあるので、もしできたとしても50行くらい増えちゃうんですよね、
maisumakun

2019/12/30 07:11

えっと、「Dictionaryから引いてくる」部分だけを独立して関数にする必要はありますか?
maisumakun

2019/12/30 07:12

「コントロールとキーを渡して、あればセットして戻る」という関数を作れば、「ないときに何を返すか」で悩む必要もないかと思うのですが。
JumpActionGames

2019/12/30 07:13

関数で行っている実際のコードは GameLanguages.langs[Tuple.Create(Tuple.Create(langs,Scenes),keys)]; ですから、 さすがに、、
maisumakun

2019/12/30 07:14

簡略化しすぎて、重要な部分が伝わっていません。懸念点がわかるようにコード例を書き直したほうがいいかと思います。
JumpActionGames

2019/12/30 07:16

ちょっと読み込むjsonをresource上において、存在しないときはresourceからとってくるという感じにします
guest

0

メソッドを作るとき、想定できる例外で例外を吐いてはいけません。
ただし、続行不能によりアプリケーションを終了する場合を除きます。

この場合 aメソッドに問題があります。
Dictionary<string,string> b に該当するキーがなかった時に何を返すかを予め決めておきます。
ここでは単純にnullを返すことにしましょう。

C#

1string A(string c) 2{ 3 return b.Keys.Contains(c) ? b[c] : null; 4}

とすると
label.Text = A("abcd") ?? label.Text
こんな具合に書けます。

投稿2019/12/30 07:25

編集2019/12/30 07:26
hihijiji

総合スコア4150

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

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

0

自己解決

この問題の解決方法を変えました。

投稿2019/12/30 07:32

JumpActionGames

総合スコア29

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

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

0

スマートではないですが、キーが一致する項目がディクショナリになければ元の値をそのまま代入するとか。

C#

1label1.Text = a("cba") ?? label1.Text;

投稿2019/12/30 07:17

draq

総合スコア2573

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

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

0

エラーが出たときはlabelへの代入しないようにすればいいのです

投稿2019/12/30 06:47

y_waiwai

総合スコア87774

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

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

JumpActionGames

2019/12/30 06:55

label.Text = 〇〇; の前に、 try { label.Text = 〇〇; } catch { return; } とかは嫌です
y_waiwai

2019/12/30 06:56

「C# 例外」でぐぐれば、エラーが出たときの解説が出てきます
JumpActionGames

2019/12/30 06:57

label.Text = 〇〇; の前に、 try { label.Text = 〇〇; } catch { return; } とかは嫌です
y_waiwai

2019/12/30 06:58

質問に書いてないことをあと付けでどーこー言わないようにw あなたの好みなんか知ったこっちゃありません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問