
String型を3つで比較したい!
Compare関数は2つしか比較出来ません。
3つだとSelect文を2重に書くしか方法はないのですか?
参考サイト:
http://jeanne.wankuma.com/tips/vb.net/string/com …
ちなみに、やりたいことは電卓で、.が複数回呼ばれたとき1つだけにしたいのです。
本当は、
If Stirng型今回 = Stirng型前回 = "."
Else
処理したい内容
End If
です。
No.4ベストアンサー
- 回答日時:
#2の方が言っている通り連続して「.」が入力されない限りRepleseは意味がなくなります。
自分が回答した奴も同じです。
ではどうするのか。
一番いいのは「.」のキーボードクリックイベントで既に入力した値に「.」が存在するかを確認して存在すれば追記しないようにすればいいのです。
KeyDownとKeyPressイベントの処理を書いてあげる事で実行できます。
※現在、開発環境が整っていないため正確なコードを書けません。
文字列検索は以下のコードです。
If (strTarget.IndexOf(".") >= 0) Then
'文字列内に存在する
Else
'文字列内に存在しない
End If
strTargetは検索対象となる文字列です。
KeyDown内で判定してメンバ変数(Boolean)のフラグを立てます。
KeyPrassでフラグが立っていたら、Key入力を無効にしてあげれば実装可能です。
※KeyDown時でないと判定できない気がしたのですが、KeyPrassだけで実装できるようであればKeyPrassだけで問題ありません。
この回答への補足
間違ってました。
×誤り
Input = Input + Data
If (Input.IndexOf(".") >= 0) Then
'なにもしない
Else
TextBox1.Text = Input
End If
○正しい
If (Input.IndexOf(".") >= 0 And Data = ".") Then
'なにもしない
Else
Input = Input + Data
TextBox1.Text = Input
End If
ありがとうございます。
KeyDownとKeyPressイベント処理ですが、計算機プログラムが、すべてボタンを押していくタイプなので、
キーボードは使わないです。
ボタンクリックイベントで、文字列プロパティを取得すると値は取得できますが、
既に入力した値に●があるか確認するところがわかりません。
これだと文字列検索と一緒のような気がします・・・
Input = Replace(Input + Data, "..", ".")
TextBox1.Text = Input
↓
Input = Input + Data
If (Input.IndexOf(".") >= 0) Then
'なにもしない
Else
TextBox1.Text = Input
End If
If文って嫌い・・・なんかださくなる気がするのは私だけでしょうか。
No.6
- 回答日時:
あ。
書き方が悪かったですね。。すみません。例えば、●を挿入するボタンの名前を btnPeriod としますと、それをクリックした時のイベントは以下のようになります。
Private sub btnPeriod_Click()
Dim lineStr as String = Me.valueLineText.Text
if lineStr.indexOf('.') > 0 Then
'それ以上何も処理しない
Else
'●がまだ含まれていなかったら、素直に入力文字列に●を添付する
lineStr = lineStr & "."
Me.ValueLineText.Text = lineStr 'いらないかも
Me.ValueLineText.refresh()
End Then
End Sub
※最後に付け加えてね!っていう書き方が悪かったですね(^^;)
※ただ、lineStr が見ている参照先が Me.ValueLineText.Text の参照先になるので、これは不要かも・・・(動かしてないから分からないw)。
またぐちゃぐちゃなってきたので、まぁそこはおいといて。。。
言いたかったのはこんな感じです。
で、もし別途、メソッドにするならば、引数と返り値を作って上げてもよいかも。。
以下、参考までに
Private Function setP(ByBal str as String) as String
if str.indexOf('.') > 0 Then
'それ以上何も処理しない
Else
'●がまだ含まれていなかったら、素直に入力文字列に●を添付する
str = str & "."
End Then
return str
End Sub
とか。。。
ありがとうございました。
If (Input.IndexOf(".") >= 0 And Data = ".") Then
'なにもしない
Else
Input = Input + Data
TextBox1.Text = Input
End If
にして対応しました。
あとBKとCEの機能を付けました。
BKは1つだけしか戻れないわ、CE押したあとに演算子押すとExceptionエラーが出るわ、
=で計算が完了して、=を押したら最後、再計算できないわ、、、
Windowsの標準電卓の方が質がいいという結果に終わりました。
たぶん、メモ帳を作っても同じ結果が待っているような感じですね。。。
1つ気づいたのは、人間ってどこまで馬鹿なんだろうって思いました。
小数点複数打つって、ないわぁ~~
No.5
- 回答日時:
すみません、前のスレのものです。
ちょっと修正というか訂正。。。
誤)End Then
正)End If
あと、更新した文字列は
Me.valueLineText.Text = lineStr
とかで返してあげてね!
※サンプルソース自体よりも、ソースの意図を重視されてください。
ありがとうございます。
sub setPeriod()
Dim lineStr as String = Me.valueLineText.Text '既に入力済みの文字列を取得
if lineStr.indexOf('.') > 0 Then 'もし、既に●が文字列に含まれていたら
'それ以上何も処理しない
Else
'●がまだ含まれていなかったら、素直に入力文字列に●を添付する
lineStr = lineStr & "."
End If
End Sub
Me.valueLineText.Text = lineStr
なんかおかしい。
じーーーー
4●以降処理されない・・・
ピリオドだけのためのメソッドに飛ばすということか・・・
変数を作りたくない&If文が嫌いな私はおかしいですか?
KeyDownイベントハンドラもきらいだ・・・
コードを分離して書いてないからかな???Form1のタグ?クラスに全部書くからださく見えるのかな???
44●以降も処理されないような。。。
No.3
- 回答日時:
質問への直接的な回答ではないですが、私なら、
『あとで ● を1つだけにする』のではなく、
『前段で ● を1つ以上増えさせない方法』を検討するかと思います。
既にスレがありますが、
1●1●1●1
のようなとびとびな場合や、
2●●●●●●2●2
のような場合、或いはもっと変形的な入力をされることを考えると、●が増えた後に取り除くのはかなり力技が必要になると思います。
String.LastIndexOf をループでまわすとか。。。
ならば、電卓の●ボタンが押された際の実装として、私なら次の様なコードにする事を考えます。
※実際に動かしていないので、適宜修正が必要かと思いますが、ここでは意図を汲み取って頂ければと思います。
'●ボタンが押されたときの実装
sub setPeriod()
Dim lineStr as String = Me.valueLineText.Text '既に入力済みの文字列を取得
if lineStr.indexOf('.') > 0 Then 'もし、既に●が文字列に含まれていたら
'それ以上何も処理しない
Else
'●がまだ含まれていなかったら、素直に入力文字列に●を添付する
lineStr = lineStr & "."
End Then
End Sub
このように、●を打った時点で、不要な●を増やさないような実装にしておけば、ユーザが寝ぼけて●を100回入力したとしても、はじめの1回の●のみを有効にすることができます。
でなければ、私なら入力済みの文字列を数値に変換できない時点で例外をスローさせるのが正しいのではないかと思います。。。
だって、
1●23●4 って入力された場合、そのユーザは
⇒123●4 と打ちたかったのか、それとも
⇒1●234 と打ちたかったのか、本人にしか分からないのですから。。
ありがとうございます。
123●4 と打ちたかったのか、それとも1●234 と打ちたかったのか・・・
人間が嫌いになりそうです!!
※Read Me
1●●23や12●●3等、小終点を二回連続で打つと自動で訂正されますが、
1●2●3●4というような小数点を複数にわけて入力する動作には対応していません。
これは仕様です。
ごめんなさい。グレてきました。。。
対応できるようにがんばります。
No.1
- 回答日時:
崩して考えてみて下さい。
■IFのみで値1・値2・値3が全て同じか判定する。
値1:10
値2:10
値3:10
If (値1 = 値2 And 値1 = 値3) Then
'値1と値2が同じで値1と値3が同じなので値1・値2・値3は全て同じ
End If
判定文にはAnd条件とOr条件を書くことが出来ます。
>If Stirng型今回 = Stirng型前回 = "."
>Else
> 処理したい内容
>End If
やるのであれば
If (Stirng型今回 <> "." And Stirng型前回 <> ".") Then
処理したい内容
End If
※Stirng型今回 = "." And Stirng型前回 = "."の結果が真となる処理を必要としない場合
この回答への補足
今日は大変ありがとうございました。
0除算は出来ませんでしたが、小数点を1つに抑えることが出来るようになり大変満足してます。
あと少数点が2個、3個打てることに気づいたのは、例外処理を学んだお陰だと思っています。
ありがとうございます。
..を.にしたいということで質問しました。
しかし、結果的にはIf文ではなく、Replaceを使うことに決めました。
>If (値1 = 値2 And 値1 = 値3) Then
And を使うのですね。
サンプルは全部2個の比較だったので、初めて知りました。
小数点(.)は見にくいので、ここでは●とします。
今回●ボタンを押すと、絶対●のままです。
前回のは4●4にしようとしたら前回のデータは4●が入っています。
4444●かも444●かも知れません。
この3つの比較では●●を●にすることは出来ませんでした。
そこで、保存 = Replace(前回 + 今回, "●●", "●")にすることで成功しました!!
しかも、綺麗です!!コードが!!
Input = Replace(Input + Data, "..", ".")
TextBox1.Text = Input
で出来ました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BCD形式で時刻を!
-
ArrayListの要素数の上限
-
excel vba 時間計算と条件分岐...
-
バイナリファイルの計算方法
-
wsprintf関数の使い方について
-
C言語の変数(LSB)の合わせ込...
-
DateTimePickerに値を入れたい...
-
Stringクラスの変数の格納アド...
-
Javascriptでマシン固有の情報...
-
StringBufferクラスについて
-
JSPでの計算結果表示
-
8桁整数を限りなく短い文字列に...
-
DOSバッチで変数の値を変数名に...
-
JSPでHashMap・配列の変数の値...
-
URIの記述方法
-
javaのCSVデータ読込についてです
-
2進数は計算には使えない? 16...
-
Evaluate()に文字列の形式の数...
-
VB.NET+Javascriptで、VB.NETで...
-
String型の値が大文字か小文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
DateTimePickerに値を入れたい...
-
ArrayListの要素数の上限
-
BCD形式で時刻を!
-
wsprintf関数の使い方について
-
excel vba 時間計算と条件分岐...
-
javaのCSVデータ読込についてです
-
PSQLExceptionが発生する
-
JSPでの計算結果表示
-
実行シェルからCOBOLへパラメー...
-
matchesを否定文として使う方法...
-
JSPでHashMap・配列の変数の値...
-
DOSバッチで変数の値を変数名に...
-
VB6,論理演算子Orの使い方がわ...
-
C言語の変数(LSB)の合わせ込...
-
hiddenの値を消したくない!
-
ResultSetの内部構造(Java)
-
Evaluate()に文字列の形式の数...
-
getParameterの値変更
-
Javaの問題なのですが、「3文字...
おすすめ情報