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

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

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

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

Q&A

2回答

471閲覧

計算結果をもとに値を参照し、計算させるやり方がわかりません。

town

総合スコア6

C#

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

0グッド

0クリップ

投稿2022/05/14 04:25

編集2022/05/14 06:16

使用言語:c#
環境:Windows
Windows Forms アプリを Visual Studio 2022 でフレームワークを .NET Framework 4.8 で作っています

作成しているexeソフト画像
イメージ説明
実現したいこと
計算結果に表示されている数字(テキストボックスに数字を入れて計算ボタンを押すと計算結果に表示するようにしています)をもとに右側のリストボックスから選び適応ボタンを押すと、計算結果に反映されるといった具合にしたいです。リストボックスの文字は個別で数字を持っていて、適応ボタンを押すと計算結果*2倍や0.5倍という具合です。
例:s:100(計算結果)だとする。リストボックスのA2017 は2なので適応をクリックでs:200になる。S45cは0.5なので、適応ボタンを押すとs:50になる。

現状
計算結果から参照した数字をどう引き抜けばよいのかわからないです。
もともとは計算結果の変数を移動すればいいのでは。と考えていたのですがc#は変数を別のオブジェクトから変数をもってこれないということを知り、詰まってしまいました。

質問まとめ
1,リストボックスの文字に個別に数字を持たせるやり方、
2,リストボックスの数字をもとに適応ボタンを押すと、計算結果に反映させるには

上記2つご教示お願い致します。

コード いらない部分は省いています。仮に作っているので変数は適当です。申し訳ないです。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;は namespace WindowsFormsApp3 { public partial class form1 : Form を public form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) {     // リストボックスに表示されている文字コード listBox1.Items.Add("A2017"); listBox1.Items.Add("S45c"); listBox1.Items.Add("sus304"); } private void button3_Click(object sender, EventArgs e) {     //周速の下のテキストボックスからaに代入 int a = Convert.ToInt32(textBox1.Text);     //工具径の下のテキストボックスからbに代入 int b = Convert.ToInt32(textBox3.Text);     //cに計算結果を代入 double c = (1000 * a) / (3.14 * b);     //cを整数にした値をxkkに代入 int xkk = (int)c;     //計算結果をラベル1に表示(画面左下の計算結果というTextに) label1.Text = Convert.ToString(xkk); } private void button1_Click(object sender, EventArgs e) {     //適応ボタンです。画面右下。ここをクリックすると画面左下の計算結果(xkk)の値にリストボックスの数値をかけて計算したい。     //リストボックスの文字コードに数値を割り振る int A2017 = 2; double s45c = 0.5;          //画面左下の計算結果の値を引っ張ってくる int hkhkj = Convert.ToInt32(textBox1.Text);          //画面左下の計算結果*2(リストボックスの数値) int hosei = hkhkj* A2017; label1.Text = Convert.ToString(hosei); } } }

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

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

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

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

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

y_waiwai

2022/05/14 04:50

あなたのいう計算結果とはどれのことでしょうか。 問題が見えません
town

2022/05/14 05:06

周速のテキストボックスと工具径のテキストボックスを計算させた値が計算結果です。
y_waiwai

2022/05/14 05:09

提示のコードのどれに当たるんでしょう
退会済みユーザー

退会済みユーザー

2022/05/14 05:27 編集

何を何で作っているかを書きましょう。(例: Windows Forms アプリを Visual Studio 2022 でフレームワークを .NET Framework 4.8 で作っています・・・とか) コードに出てくる TextBox, Button, Label のどれが画像のどれに該当するのか教えてください。そして画像のどれに何を入力して、どのように操作すると、求める結果がどのように計算されるのかの数式と、計算結果がどれに表示されるのか教えてください。
town

2022/05/14 06:24

不慣れで申し訳ないです。お手数をおかけしました。 コメントで詳細に書きました。  求める結果の式は、(周速(a)*1000)/ (3.14*工具径(b)= s:計算結果 画面みぎのリストボックスの文字を選択して計算すると s:計算結果*2(A2017)という具合です。 この結果を画面左下の計算結果に上書きされて計算されます。 まだ上段しかコードを書いていなく、わかりにくくなってしまいました。 申し訳ないです。。
退会済みユーザー

退会済みユーザー

2022/05/14 22:54

質問者さん、その後無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
退会済みユーザー

退会済みユーザー

2022/05/16 23:24

二度目のお願い: 質問者さん、その後無言ですが、回答したのでそれに対するフィードバックを返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。
town

2022/05/21 05:31

SurferOnWww 様 回答いただきましてありがとうございます。 また、返信遅くなりまして申し訳ございません。 早速ですが、結論から言うとまだ解決に時間を要しています。 当方初心者でして、専門用語が多いため調べながら引き続き解決していこうとおもいます。
退会済みユーザー

退会済みユーザー

2022/05/21 05:55

調べても分からないところがあったらそのままにしておかないで質問してください。 回答に載せたサンプルコードは、TextBox, Button, ListBox, Label をデザイン画面で必要分ドラッグ&ドロップしてボタンのイベントハンドラを設定すれば動きますので試してみると良いと思います。
guest

回答2

0

1,リストボックスの文字に個別に数字を持たせるやり方、

「文字」と「数字」をプロパティに持つカスタムクラスを定義し、そのカスタムクラスのリストを作成し、それを ListBox.DataSource プロパティに設定します。

2,リストボックスの数字をもとに適応ボタンを押すと、計算結果に反映させるには

まず、

//cに計算結果を代入
double c = (1000 * a) / (3.14 * b);

というところで、c はメソッド内の変数ではなく Form1 のフィールド変数に変更して、計算結果をそれに保持します。

そして、

//画面左下の計算結果*2(リストボックスの数値)
int hosei = hkhkj* A2017;

というところで hkhkj は上の c を使い、A2017 は ListBox の SelectedValue プロパティから取得できる「数字」を使って計算できるはずです。

コード例を以下に書いておきます。未入力・未選択・不正入力のエラーチェックはしてませんのでそこは自分で考えて実装してください。あと、質問者さんのコードに合わせて int 型と double 型の使い方が混ぜこぜになってますが、統一した方が良いと思います。

using System; using System.Collections.Generic; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form3 : Form { private List<ListBoxItem> list; private double c; public Form3() { InitializeComponent(); this.list = new List<ListBoxItem> { new ListBoxItem { Name = "A0217", Value = 2d }, new ListBoxItem { Name = "s45c", Value = 0.5d }, new ListBoxItem { Name = "sus304", Value = 0.3d } }; this.listBox1.DataSource = list; this.listBox1.DisplayMember = "Name"; } private void button1_Click(object sender, EventArgs e) { int a = Convert.ToInt32(this.textBox1.Text); int b = Convert.ToInt32(this.textBox2.Text); this.c = (1000 * a) / (3.14 * b); this.label1.Text = this.c.ToString(); } private void button2_Click(object sender, EventArgs e) { double value = ((ListBoxItem)this.listBox1.SelectedValue).Value; double hosei = c * value; this.label2.Text = hosei.ToString(); } } public class ListBoxItem { public string Name { get; set; } public double Value { get; set; } } }

実行結果は以下のようになります。

イメージ説明

投稿2022/05/14 06:52

編集2022/05/14 07:06
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

簡単にするんであれば、ListBoxのSelectedIndexには、選択した項目のインデックス(先頭から何番目かの数字)が入りますんで、そいつをもとに計算する、というテが使えます

投稿2022/05/14 07:02

y_waiwai

総合スコア87774

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

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

退会済みユーザー

退会済みユーザー

2022/05/14 07:52

0.5 という数字もあるそうで、整数にはならないようですけど、Index という整数を使ってどうするのですか?
y_waiwai

2022/05/14 08:57

まあふつうは、選択項目の番号がわかれば、テーブルなりなんなりで該当する数値を引っ張ってきて計算すると思いますよw
退会済みユーザー

退会済みユーザー

2022/05/14 09:40

> まあふつうは、選択項目の番号がわかれば、テーブルなりなんなりで該当する数値を引っ張ってきて計算すると思いますよw それは y_waiwai さんにとっての普通かもしれませんが、一般的な意味での普通にはそのような面倒なことはしないと思いますよ。「テーブルなりなんなり」があるんだったらそのデータを直接 ListBox に設定するれば済むことですから。
y_waiwai

2022/05/14 09:45

あなたはそうおもう、私はそう思う、ということでいいんじゃありませんか。 自分の考えてること以外は間違いだ!と思いたい気持ちはわからんでもないですが。
退会済みユーザー

退会済みユーザー

2022/05/14 09:50

いや、よくはないですね。はっきり言わせてもらえると、質問者さんが誤解して間違った方向に進まないようにしているつもりなので。
y_waiwai

2022/05/14 09:53

と、あなたはおもってるわけですねw
退会済みユーザー

退会済みユーザー

2022/05/14 10:57

いえ、確信しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問