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

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

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

Re[6]: VB6のコードをC#に書き換えるには。


(過去ログ 51 を表示中)

[トピック内 36 記事 (1 - 20 表示)]  << 0 | 1 >>

■27767 / inTopicNo.1)  VB6のコードをC#に書き換えるには。
  
□投稿者/ C#初心者 (10回)-(2008/11/14(Fri) 11:37:34)

分類:[C#] 

ありきたりな質問ですみませんが、
現在研修でC#で電卓を作成しているのですが、
VB6で作成した電卓のコードをC#にして作りなさい
といわれているのですが、わからない所があるので
ヒントなどいただけたらと思い投稿しました。

どうやればわからない箇所は↓の
Private Sub cmdEnzan_Click(Index As Integer)
'数字キーを押した後
If SuuFlag = True Then
If EFlag = False Then 'クリア、=キー以後初めての演算キー
dData1 = Val(txtDisplay.Text) '1つ目数値記憶
If Left(txtDisplay.Text, 1) = "." Then
txtDisplay.Text = "0" & txtDisplay.Text
End If
EFlag = True
Else
dData2 = Val(txtDisplay.Text) '2つ目数値記憶
If Left(txtDisplay.Text, 1) = "." Then
txtDisplay.Text = "0" & txtDisplay.Text
End If
End If
If Index <> EQU Then '=以外
keisan '呼び出し関数
Enzan = Index '演算種類記憶
dData2 = 0
Else '=のとき
keisan
EFlag = False
End If
txtDisplay.Text = Trim(Str(dData1)) '結果の表示
If Left(txtDisplay.Text, 1) = "." Then
txtDisplay.Text = "0" & txtDisplay.Text

End If
'等号キーを押した後
ElseIf Index = EQU Then
If dData2 = 0 Then
dData2 = dData1
End If
keisan
txtDisplay.Text = Trim(Str(dData1))
EFlag = False
'四則キーを押した後
Else
dData1 = Val(txtDisplay.Text) '1つ目数値記憶
dData2 = 0
Enzan = Index '演算種類記憶
EFlag = True
End If
SuuFlag = False

End Sub

上記のコードをC#ではどのように書けばいいのか
わからないのでヒントを戴ければと思います。

よろしくお願いします。
引用返信 編集キー/
■27768 / inTopicNo.2)  Re[1]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (27回)-(2008/11/14(Fri) 11:45:21)
とりあえず

If Then Else End If



if ( ) {
}
else {
}

にしてはどうですか?

# 図表モードで投稿してください。
引用返信 編集キー/
■27769 / inTopicNo.3)  Re[2]: VB6のコードをC#に書き換えるには。
□投稿者/ みきぬ (210回)-(2008/11/14(Fri) 12:06:05)
方法1:機械的に VB の構文から C# の構文に翻訳していく
方法2:その VB のコードをいったん仕様レベルにおとし、そこから新しく C# のコードを書く

お好きなほうでどうぞ。
その上で、例えば「VB でいう Val() は、C# だと何にあたるのか?」とか、分からないところを具体的に質問してくれるとこちらも答えやすい。
引用返信 編集キー/
■27770 / inTopicNo.4)  Re[3]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (28回)-(2008/11/14(Fri) 12:17:41)
> その上で、例えば「VB でいう Val() は、C# だと何にあたるのか?」とか…

同感です。
で、タイトルも、もっと具体的にしてください。
引用返信 編集キー/
■27771 / inTopicNo.5)  Re[2]: VB6のコードをC#に書き換えるには。
□投稿者/ C#初心者 (11回)-(2008/11/14(Fri) 12:30:13)
No27768 (.SHO さん) に返信
早速書き込みありがとうございます。

早速やってみたんですが、
If SuuFlag = True Then
        If EFlag = False Then    'クリア、=キー以後初めての演算キー
            dData1 = Val(txtDisplay.Text)    '1つ目数値記憶
            If Left(txtDisplay.Text, 1) = "." Then
                txtDisplay.Text = "0" & txtDisplay.Text
            End If
            EFlag = True
        Else
            dData2 = Val(txtDisplay.Text)    '2つ目数値記憶
            If Left(txtDisplay.Text, 1) = "." Then
                txtDisplay.Text = "0" & txtDisplay.Text
            End If
        End If

この部分を、
 if (SuuFlag == true)
            {
                if (EFlag == false)
                {
                    dData1 = double.Parse(txtDisp.Text);
                    EFlag = true;
                }
                else
                {
                    dData2 = double.Parse(txtDisp.Text);
                }

っという風に直してデバッグしてみたんですけど、
一番最初のif (SuuFlag == true)で止まって
それ以下のコードが読まれないので、コードの
書き方が間違っているのでしょうか?

引用返信 編集キー/
■27772 / inTopicNo.6)  Re[3]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (29回)-(2008/11/14(Fri) 12:39:18)
> 一番最初のif (SuuFlag == true)で止まって

SuuFlag を true にして、この関数をよんでないからです。
引用返信 編集キー/
■27773 / inTopicNo.7)  Re[4]: VB6のコードをC#に書き換えるには。
□投稿者/ C#初心者 (12回)-(2008/11/14(Fri) 12:39:58)
No27770 (.SHO さん) に返信
>>その上で、例えば「VB でいう Val() は、C# だと何にあたるのか?」とか…
>
> 同感です。
> で、タイトルも、もっと具体的にしてください。

わかりづらくてスミマセン。
この部分全体的にどうすればいいのか
わからなかったので・・・。

ここの部分でVBのときは演算キーを押す前の1つ目の
数値と押した後の数値2を記憶させてるんですが、

C#ではどうやっても別々に出来なかったので。
引用返信 編集キー/
■27774 / inTopicNo.8)  Re[4]: VB6のコードをC#に書き換えるには。
□投稿者/ C#初心者 (13回)-(2008/11/14(Fri) 12:47:25)
No27772 (.SHO さん) に返信
>>一番最初のif (SuuFlag == true)で止まって
> 
> SuuFlag を true にして、この関数をよんでないからです。

そうなんですか。

って事は、
if (SuuFlag == true && EFlag == false)

にすれば大丈夫ですか?

引用返信 編集キー/
■27775 / inTopicNo.9)  Re[5]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (30回)-(2008/11/14(Fri) 12:51:09)
> この部分全体的にどうすればいいのか

VBの状態で、まずリファクタリングした方が良さそうな気がしてきました。
こんなに沢山フラグ立てなくても処理できないですかね?
引用返信 編集キー/
■27776 / inTopicNo.10)  Re[5]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (31回)-(2008/11/14(Fri) 12:55:21)
> if (SuuFlag == true && EFlag == false)
> にすれば大丈夫ですか?

その強引な発想が、フラグだらけの汚いプログラムにします。

それでは、1つ目の数値の時は通るようになりますが
2つ目の数値(EFlagがtrue)の時はやっぱり通りません。
(しかも && じゃなくて || だし…)
引用返信 編集キー/
■27777 / inTopicNo.11)  Re[3]: VB6のコードをC#に書き換えるには。
□投稿者/ みきぬ (211回)-(2008/11/14(Fri) 13:07:46)
No27771 (C#初心者 さん) に返信

ところで、C# に書き換えたコードから VB でいうところの
>             If Left(txtDisplay.Text, 1) = "." Then
>                 txtDisplay.Text = "0" & txtDisplay.Text
>             End If

の部分がごっそり抜け落ちているけど平気?

引用返信 編集キー/
■27778 / inTopicNo.12)  Re[6]: VB6のコードをC#に書き換えるには。
□投稿者/ C#初心者 (14回)-(2008/11/14(Fri) 13:16:03)
No27776 (.SHO さん) に返信
> その強引な発想が、フラグだらけの汚いプログラムにします。
> 
> それでは、1つ目の数値の時は通るようになりますが
> 2つ目の数値(EFlagがtrue)の時はやっぱり通りません。
> (しかも && じゃなくて || だし…)

.SHOさんお手数おかけしてすみません。

if (SuuFlag == true || EFlag == false)にしてみます。

keisan '呼び出し関数
こちらなんですけど、VBではSubプロシージャを呼びだせるんですけど、
C#にも同じようなやり方はあるのでしょうか?

引用返信 編集キー/
■27779 / inTopicNo.13)  Re[4]: VB6のコードをC#に書き換えるには。
□投稿者/ C#初心者 (15回)-(2008/11/14(Fri) 13:18:27)
No27777 (みきぬ さん) に返信
> ■No27771 (C#初心者 さん) に返信
>
> ところで、C# に書き換えたコードから VB でいうところの
>> If Left(txtDisplay.Text, 1) = "." Then
>> txtDisplay.Text = "0" & txtDisplay.Text
>> End If
>
> の部分がごっそり抜け落ちているけど平気?

こちらは、VBの時に「0.25」と表示されるところが「.25」と
表示されたので付け足したコードです。
やっぱり、C#でも同じように書いたほうがいいですか?


後、先ほどのアドバイスありがとうございました。
引用返信 編集キー/
■27781 / inTopicNo.14)  Re[7]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (32回)-(2008/11/14(Fri) 13:24:31)
> keisan '呼び出し関数
> こちらなんですけど、VBではSubプロシージャを呼びだせるんですけど、
> C#にも同じようなやり方はあるのでしょうか?

keisan();
です。
引用返信 編集キー/
■27782 / inTopicNo.15)  Re[5]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (33回)-(2008/11/14(Fri) 13:26:21)
> こちらは、VBの時に「0.25」と表示されるところが「.25」と
> 表示されたので付け足したコードです。
> やっぱり、C#でも同じように書いたほうがいいですか?

VB とか C# とかの問題じゃなく、仕様の問題じゃないですか?
引用返信 編集キー/
■27783 / inTopicNo.16)  Re[8]: VB6のコードをC#に書き換えるには。
□投稿者/ C#初心者 (17回)-(2008/11/14(Fri) 14:46:01)
No27781 (.SHO さん) に返信
>>keisan '呼び出し関数
>>こちらなんですけど、VBではSubプロシージャを呼びだせるんですけど、
>>C#にも同じようなやり方はあるのでしょうか?
> 
> keisan();
> です。

ありがとうございます。

Trim(Str(dData1))なのですが、
これは、
dData1.ToString()
であってますでしょうか?

引用返信 編集キー/
■27784 / inTopicNo.17)  Re[9]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (34回)-(2008/11/14(Fri) 14:55:07)
> Trim(Str(dData1))なのですが、
> これは、
> dData1.ToString()
> であってますでしょうか?

まぁ、あってると言えばあってます。
VB の時点で、Trim は不要じゃないですかね。
引用返信 編集キー/
■27785 / inTopicNo.18)  Re[6]: VB6のコードをC#に書き換えるには。
□投稿者/ .SHO (35回)-(2008/11/14(Fri) 15:05:30)
2008/11/14(Fri) 15:06:06 編集(投稿者)

っていうか、あってるかどうかだけの問題だったら
両方走らせてみればわかりませんか?

string s = dData1.ToString();
System.Console.WriteLine( s );

だけですよね。
引用返信 編集キー/
■27786 / inTopicNo.19)  Re[10]: VB6のコードをC#に書き換えるには。
□投稿者/ C#初心者 (19回)-(2008/11/14(Fri) 15:18:37)
No27784 (.SHO さん) に返信
一応自分なりにヒントを参考に書いたのですが、
1つ目の数値は記憶されるんですが、2つ目の数値を入力する時
1つ目の数値の続きから入力されてしまうので、どこが
おかしいのか指摘していただけますでしょうか?


private void SetMemory(int nSet)    
        {
            if (SuuFlag == false && EFlag == false)
            {
                dData1 = double.Parse(txtDisp.Text);    //1つ目の数値記憶
                EFlag = true;
            }
            else
            {
                dData2 = double.Parse(txtDisp.Text);    //2つ目の数値記憶
            }


            if (nSet != EQU)    //=以外の時
            {
                keisan();
                Enzan = nSet;
                dData2 = 0;
            }
            else
            {
                keisan();
                EFlag = false;
            }
              txtDisp.Text = dData1.ToString();

            if (nSet == EQU)
            {
                if (dData2 == 0)
                {
                    dData2 = dData1;
                }
                keisan();
                txtDisp.Text = dData1.ToString();
                EFlag = false;
            }
            else
            {
                dData1 = double.Parse(txtDisp.Text);
                dData2 = 0;
                Enzan = nSet;
                EFlag = true;
                SuuFlag = false;
            }

            
        }

引用返信 編集キー/
■27787 / inTopicNo.20)  Re[10]: VB6のコードをC#に書き換えるには。
 
□投稿者/ いしだ (180回)-(2008/11/14(Fri) 15:21:28)
> VB の時点で、Trim は不要じゃないですかね。
+の場合、Strすると空白がつくから必要なんじゃないですかね。
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -