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

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

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

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

Visual Studio

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

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

2回答

6445閲覧

Visual Studio(C#) コンソールアプリのプログラムをフォームアプリで動くようにしたいです.

inupisu

総合スコア11

C#

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

Visual Studio

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

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2018/06/21 07:06

前提・実現したいこと

Visual Studio(C#)コンソールアプリで書いたプログラムをフォームアプリでも動くようにしたいです.

ここに質問の内容を詳しく書いてください。
コンソールアプリをネットに記事を参考にしながらC#で作成しました.プログラムの中でssh.netというライブラリを参照し,teratermなどのターミナルソフトを使わずに,raspberry piにssh接続.dateコマンドにより日付や時刻を取得するというプログラム内容です. それらをフォームアプリ内のボタンを入力したらその結果が出力されるように移行したいのですが,フォームアプリ内でやるとうまく出力がされません.VSは2017 言語はC#で,windowsは7です.raspberry piは3のmodelBを使用しており,osはraspbianです.VSが入ってるpcと,raspberry pi同じルータに無線でつながっています.インターネットにはつながっておらず,ローカル(会社内や学校内)で接続されています.

発生している問題・エラーメッセージ

結果が出力されません.

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using Renci.SshNet; 7 8namespace ConsoleApp2 9{ 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 try 15 { 16 // 接続先のホスト名またはIPアドレス 17 var hostNameOrIpAddr = "xxx.xxx.x.x"; 18 19 // 接続先のポート番号 20 var portNo = 22; 21 22 // ログインユーザー名 23 var userName = "pi"; 24 25 // ログインパスワード 26 var passWord = "xxxxxxxx"; 27 28 // コネクション情報 29 ConnectionInfo info = new ConnectionInfo(hostNameOrIpAddr, portNo, userName, 30 new AuthenticationMethod[] { 31 new PasswordAuthenticationMethod(userName, passWord) 32 /* PrivateKeyAuthenticationMethod("キーの場所")を指定することでssh-key認証にも対応しています */ 33 } 34 ); 35 36 // クライアント作成 37 SshClient ssh = new SshClient(info); 38 39 // 接続開始 40 ssh.Connect(); 41 42 if (ssh.IsConnected) 43 { 44 // 接続に成功した(接続状態である) 45 Console.WriteLine("[OK] SSH Connection succeeded!!"); 46 } 47 else 48 { 49 // 接続に失敗した(未接続状態である) 50 Console.WriteLine("[NG] SSH Connection failed!!"); 51 return; 52 } 53 54 // 接続終了 55 ssh.Disconnect(); 56 } 57 catch (Exception ex) 58 { 59 // エラー発生時 60 Console.WriteLine(ex); 61 throw ex; 62 } 63 } 64 } 65} 66 67--- 68 69### 補足情報(FW/ツールのバージョンなど) 70 71上記のプログラムが,コンソールアプリで動かしているものです. これをフォームアプリに移植させるために,冒頭の部分をこのように変更いたしましたが,うまくいきませんでした. 72 73 public partial class Form1 : Form 74 { 75 public Form1() 76 { 77 InitializeComponent(); 78 } 79 private void Main(string[] args) 80 { 81 try 82 { 83 // 接続先のホスト名またはIPアドレス 84 var hostNameOrIpAddr = "raspberry.local"; 85 86 すごく的外れで意味の分からないことを言ってしまっているかもしれません.. これより先に進めず困っています.どなたか詳しい方,アドバイスいただけたら嬉しいです.よろしくお願いします.

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/06/21 07:23

〈フォームアプリ内でやるとうまく出力がされません〉というのは、どういう結果を期待したものの、実際はどうなったのか、kwsk
inupisu

2018/06/22 02:51

閲覧ありがとうございます. コンソールアプリ内では,dateコマンドを打つと,日付や時間などを取得できていたのですが,フォームアプリ内では構文エラーが出てしまい,それを除去することができなかったという感じです.
guest

回答2

0

ベストアンサー

まず、フォームアプリケーションではMain関数は勝手に実行されません。
で、フォームアプリケーションは、コンソールアプリと違い、イベントドリブン形式で実行されます
これはどういうことかというと、
・フォームが表示された
・ボタンが押された
・表示が更新された
・通信が入った
・その他いろいろいろいろ
というなんかアクションを起こした(イベントが起きた!)、というときに、特定の関数が実行されるので、そのアクションに合わせてコードを書く、というやり方となります

ということで、まず決めなければならないのは、フォームにどういうボタンやどういう表示を配置して、なにをしたときにどうするのか、というのを決めないといけません

とりあえずは、ネットにある作成例をそのまま打ち込んでいけばどうでしょう
「C# フォームアプリケーション」でぐぐるといろいろでてくるようです

投稿2018/06/21 07:41

y_waiwai

総合スコア87774

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

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

inupisu

2018/06/22 02:53

回答ありがとうございます. main関数は勝手には実行されないんですね.. c言語を少しやっていた時にmainは実行されるものだと覚えてしまっていたので...知識不足でした.イベントハンドラの中に処理を記述してやってみたいと思います. ありがとうございました!
y_waiwai

2018/06/22 03:08

まあ、正確に言うと、フォームアプリケーションでも、staticクラスの static void Main() の関数がまず実行されます(ふつうは、program.cs 内の Main 関数)。 が、フォームアプリケーションにおいてはそこではフォーム/ウィンドウの初期化と実行の役目を担っていて、下手に改変してしまうとそもそものフォームアプリケーションが成り立たなくなります ということで、がんばってください
inupisu

2018/06/25 00:19

ボタンなどのイベントハンドラの中にプログラムを移行したらできました! アドバイスいただき本当にありがとうございます!
guest

0

コンソールアプリは問題なく動くのですか?

であれば、例えば(あくまで例えばですが)、Windows Forms アプリの Form に Button と Label を配置して、Button.Click のイベントハンドラの中にコンソールアプリの Main メソッドの中のコード(Main は不要。中のコードのみ)をコピーし、Console.WriteLine でコンソールに出力しているところを Label.Text に出力するよう変更すれば、アプリを実行して Button をクリックすればとりあえずは動くようになると思うのですが。

投稿2018/06/21 07:33

編集2018/06/21 07:40
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

inupisu

2018/06/22 02:54

はい! 問題なく動きます. イベントハンドラの中に処理を入れて,label出力で一回できるかどうかやってみたいと思います. ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問