C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

char型とstring型 /34 (18/12/04(Tue) 15:57) #89561
Re[1]: char型とstring型 /にゃるら (18/12/04(Tue) 16:21) #89562
Re[1]: char型とstring型 /魔界の仮面弁士 (18/12/04(Tue) 17:03) #89563
  ├ Re[2]: char型とstring型 /魔界の仮面弁士 (18/12/04(Tue) 17:10) #89564
  └ Re[2]: char型とstring型 /魔界の仮面弁士 (18/12/05(Wed) 12:03) #89565


親記事 / ▼[ 89562 ] ▼[ 89563 ]
■89561 / 親階層)  char型とstring型
□投稿者/ 34 (14回)-(2018/12/04(Tue) 15:57:59)

分類:[C#] 

VB.NETからC#への移植作業を進めているプログラミング初心者です。

VB.NET)
If e.KeyChar = "t" Or e.KeyChar = "39" Then

C#)
if (e.KeyChar == "t" | e.KeyChar == "39")

C#のコードのeから"まで赤の波線が表れ
「演算子 '=='を'char'と'string'型のオペランドに適用することはできません。」
と言うエラーが表示されます。どう解決すればいいでしょうか。お願い致します。
[ □ Tree ] 返信 編集キー/

▲[ 89561 ] / 返信無し
■89562 / 1階層)  Re[1]: char型とstring型
□投稿者/ にゃるら (53回)-(2018/12/04(Tue) 16:21:13)
うんと

    if (e.KeyChar == 't' || e.KeyChar == (char)39)

かな?

[ 親 89561 / □ Tree ] 返信 編集キー/

▲[ 89561 ] / ▼[ 89564 ] ▼[ 89565 ]
■89563 / 1階層)  Re[1]: char型とstring型
□投稿者/ 魔界の仮面弁士 (1969回)-(2018/12/04(Tue) 17:03:31)
No89561 (34 さん) に返信
> VB.NET)
> If e.KeyChar = "t" Or e.KeyChar = "39" Then

上記の VB コードは、どういう動作となることを意図したものでしょうか?


Option Strict On の時に VB のコンパイルが通らなくなることには目を瞑るとしても、
そもそも e.KeyChar が "39" という文字列とヒットすることは無いと思うのですが…。

とりあえず、「小文字の "t" もしくは シングルクォートの "'"」にヒットさせるなら
 If e.KeyChar = "t"c OrElse e.KeyChar = ChrW(39) Then
とします。Or ではなく OrElse の方が望ましいです。


> C#)
> if (e.KeyChar == "t" | e.KeyChar == "39")
元の VB コードのまま、Or をそのまま翻訳するなら、
 if (e.KeyChar == 't' | e.KeyChar == 39)
なのですが、普通は OrElse の意図となるはずなので、実際には
 if (e.KeyChar == 't' || e.KeyChar == 39)
と書くことになるでしょう。
[ 親 89561 / □ Tree ] 返信 編集キー/

▲[ 89563 ] / 返信無し
■89564 / 2階層)  Re[2]: char型とstring型
□投稿者/ 魔界の仮面弁士 (1970回)-(2018/12/04(Tue) 17:10:23)
No89563 (魔界の仮面弁士) に追記
> If e.KeyChar = "t"c OrElse e.KeyChar = ChrW(39) Then
VB 別案
 If e.KeyChar = "t"c OrElse e.KeyChar = "'"c Then
 If e.KeyChar.ToString() Like "[t']" Then


> if (e.KeyChar == 't' || e.KeyChar == 39)

C# 別案
 if (e.KeyChar == 't' || e.KeyChar == '\'')
 if (e.KeyChar == 't' || e.KeyChar == '\u0027')
 if (e.KeyChar == 't' || e.KeyChar == (char)0x27)
 if (e.KeyChar == 't' || e.KeyChar == (char)39)
[ 親 89561 / □ Tree ] 返信 編集キー/

▲[ 89563 ] / 返信無し
■89565 / 2階層)  Re[2]: char型とstring型
□投稿者/ 魔界の仮面弁士 (1971回)-(2018/12/05(Wed) 12:03:51)
No89563 (魔界の仮面弁士) に追記
>>VB.NET)
>>If e.KeyChar = "t" Or e.KeyChar = "39" Then
> とりあえず、「小文字の "t" もしくは シングルクォートの "'"」にヒットさせるなら

もしも上記の "39" というのが、
「'」(ASCII コード 39)の意味ではなく、
「→」(仮想キーコード 39)の意味だとしたら、
KeyPress イベントではなく、
KeyDown/KeyUp イベントに変更する必要があるでしょう。


Visual Basic の場合:
 If e.KeyCode = Keys.T OrElse e.KeyValue = 39 Then
 If e.KeyCode = Keys.T OrElse e.KeyCode = Keys.Right Then
 

C# の場合:
 if (e.KeyCode == Keys.T || e.KeyValue == 39)
 if (e.KeyCode == Keys.T || e.KeyCode == Keys.Right)
[ 親 89561 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -