2017-08-09 2 views
-1

私はC#の初心者です。私の最初のプログラムを作成しているうちに、問題に直面しています。C#GUI入力テキストを保存する(テキストボックス)

ので、私はこれらのいずれかのボタンをクリックすると3つのWindowsフォーム(MyForm1; MyForm2 and MyForm3)

MyForm1が、それは新しいWindowsフォームを開き、2つのボタン(利用可能なアカウント&新しいアカウントを追加します) を持っていました。

私は2 TextBox(IDは1、PWD +ボタン(保存)は1)を持っています。私はIDとPWDを入力して保存したいので、利用可能なアカウントのフォームで使用していますが、私はそれをどのように手掛かりがありません。私はYTで見たものを試したが、何も私のように動作するようです。コピー/)コードの一部を貼り付け

編集:ここでは

上記の形式のソースコードです。

私はすべて失敗したattempsを削除したので、彼らは基本です。

+0

これまでに試したコードを共有してください@ Jonathan Niixtay –

+0

そのためには、すなわちユーザー名とパスワード。 – Pirate

+0

そして...あなたの実際の問題がどこにあるかをもっと詳しく説明してください。 –

答えて

0

次のいずれかを使用することができますので、それは、すべてのフォーム間でデータを受け渡しについてです:あなたが入力フォームオブジェクトによって他のフォームから文字列をアクセスできるように

  • は、パブリック文字列にユーザー入力を設定します。

  • ユーザー入力をコンストラクタパラメータとして渡して、フォームのデータを使用することができます。

  • 代理人のような他の複数の方法もありますが、以前の2つの方法は単純だと思います。

+0

メー、助けてくれてありがとうが、私は本当に理解していない:/私のプロジェクトはかなりシンプルだと思ったが、私は少し野心的だったかもしれない。 アイデアは、複数のリーグオブレジェンドアカウントを格納するプログラムを作成して、入力よりも速くアカウントを切り替えることができ、そのすべてを覚えておく必要がなくなりました。 Form1は、使用可能なものに接続するか、作成するかを質問します。利用可能な場合は、アカウントを選択して(そのアカウントを選択してリーグオブリーガルを開始する)、1つのIDとPWDを入力します(テキストボックスで)。入力フォームに –

+0

というリストとして利用可能な形式で追加されます。 - にデータを保存するためにパブリックストリングを作成する - 他のフォームを開くときにこの文字列を渡します –

1

あなたの投稿から、あなたがしようとしていることを判断するのは難しいです。そう。あなただけのフォーム間で値を渡したい場合は、このような何かを行うことができます:

新しいアカウントのフォームに追加:

public static bool AddNewAccount(out int id, out string password) 
{ 
    id = 0; 
    password = ""; 

    AddNewAccountForm f = new AddNewAccountForm(); 
    bool result = (f.ShowModal() == ModalResult.OK); 

    if(result) 
    { 
     id = f.GetId(); 
     password = f.GetPassword(); 
    } 

    f.Dispose(); 
    return result; 
} 

をし、メインフォームで:私があることを前提と

int id; 
string pass; 

if(AddNewAccountForm.AddNewAccount(out id, out pass)) 
{ 
    //here user clicked OK, so you can save to the database your id and password 
} 
else 
{ 
    //here user clicked Cancel 
} 

AddNewAccountFormの2つのボタン。 1つはOK、もう1つはキャンセルする。これらのボタンのモーダル結果を設定する必要があります。

どのように動作するのですか? AddNewAccountメソッドは静的メソッドであるので、あなたのメイン等から、それを呼び出すことができます、

AddNewAccountForm.AddNewAccount() 

AddNewAccount方法は、あなたのフォームを作成しようとしているモーダルそれを表示し、ユーザーへのアウトパラメータによってenetred値を割り当てます。

私のコードは、あなたのAddAccountFormのような方法があることも前提としていますのgetIdがひどく書かれ

int GetId() 
{ 
    return Convert.ToInt32(idTextBox.Text); 
} 

string GetPassword() 
{ 
    return passwordTextBox.Text; 
} 

注意を、私はそれが明らかになりたかったです。今、あなたがこの方法を理解することは、intへの変換は、(TryParseがintに文字列を変換するためのより良い方法である)というようになります。

int GetId() 
{ 
    int id; 
    if(!int.TryParse(idTextBox.Text, out id)) 
     return -1; 
    else 
     return id; 
} 

することはできいくつかの構造でも、「グループ」のIDとパスワードを入力します。コードはよりクリーンになります。しかし、私はあなたが今それを必要とは思わない。しかし、あなたが興味がある場合は、ここでの構造について読むことができます。https://msdn.microsoft.com/en-us/library/aa288471%28v=vs.71%29.aspx?f=255&MSPPError=-2147217396

データベースまたはファイル内の値を格納する場合:グッドプラクティスとシステムengeneeringについて

** パートを**

あなたは本当にAddAccountFormを使ってそれらを保存してはいけません。このクラスは、アプリケーションにアカウントを作成することです(モデルのみ)。保存しないでください。これらの値(IDとパスワード)を保存する場合は、データ管理を担当する別のクラスを使用して、メインフォームに渡してください。あなたが本当に今必要かどうかわからないので、私は例を挙げていません。

+0

Facebookのようなもので話すことは可能でしょうか? (私は嫌な人ではない)私はあなたにGUIがどのように見えるかの写真を送ることができた。私はあなたが念頭に置いていることを即座に理解できると思う。 –

+0

私に電子メールを書く。それは私の方が簡単です。私は2日以内に答えるでしょう:ajachocki(at)gmail.com –

1

コードを本当に再利用できるようにするには、表示(ビュー)とデータを厳密に分離しておく必要があります。

データベースがあるとは言いませんでした。この言及の欠如は、この分離の始まりです。アカウントのリスト、辞書、またはアプリケーションで編集したい項目を含むテキストファイルがあれば、問題は似ています。

Accountsのコレクションを編集するとします。このコレクションにアカウントを追加したり、このコレクションの既存のアカウントのデータを変更したりできます。

この機能は、ICollection<Account>の機能に似ています。

だから、Form1が知る必要があるのは、ICollection<Account>を保持しているということです。何らかの形で初期化中にForm1はAccountsコレクションを読み込みます。オペレータが[Add]を押すと、Form2が開き、新しいアカウントに必要な値を入力できます。オペレータはOKまたはCancelのいずれかを選択して、このアカウントをコレクションに追加するかどうかを指定します(フォームの[保存]ボタンを使用すると、Windows標準ではなく、不明確なので使用しないでください)。

(パスワードのためのIDのためのテキストボックスとテキストボックスを持つフォームを作成するVisual StudioのデザイナでForm2

Form1

private ICollection<Account> existingAccounts; 

void OnButtonAdd(object sender, ...) 
{ 
    using (var form = new Form2()) 
    { 
     form. ...// fill any needed values 

     // show form2 and check if OK or Cancel: 
     var dlgResult = form.ShowDialog(this); 

     // only add if OK pressed, otherwise ignore 
     if (dlgResult == DialogResult.OK) 
     { 
      this.existingAccounts.Add(form.Account); 
     } 
    } 
} 

のCondでアカウント

コードを追加します。それはパスワードのプロパティを与えるので、表示されます*****)

OKを追加キャンセルボタンがあります。これらのボタンのDialogResultプロパティに適切なOKとCancelの値を与えます。

最後に入力された値を取得するために、1つのプロパティを追加します。

public Account Account 
{ 
    get 
    { // extract the values from the display 
     return new Account() 
     { 
      Id = this.TextBoxId.Text, 
      Pwd = this.TextBoxPwd.Text, 
     }; 
    } 
} 

編集既存のアカウント

あなたはまた、既存のアカウントを編集するボタンがあります。最後に追加したアカウントだけを編集したいのですか、既存のアカウントを編集したいですか?

後者の場合、オペレータがその中から1つを選択できる既存のアカウントをすべて表示する必要があります。 DataGridViewまたはBindingSourceを使用している可能性があります。おそらく次のような関数になるでしょう:

Account GetSelectedAccount() {...} 

既存のアカウントを編集するフォームは、新しいアカウントを作成するフォームに似ています。あなたは本当にそれのために同じフォームを使用することを検討する必要があります。 Form1ので

public Account Account 
{ 
    get 
    { // extract the values from the display 
     return new Account() 
     { 
      Id = this.TextBoxId.Text, 
      Pwd = this.TextBoxPwd.Text, 
     }; 
    } 
    set 
    { 
     this.TextBoxId.Text = value.Id; 
     this.TextBoxPwd.Text = value.Pwd; 
    } 
} 

、編集を押したとき:I上記の例のよう

void OnButtonEdit_Click(object sender, ...) 
{ 
    using (var form = new FormEdit()) 
    { 
     Account accountToEdit = this.GetSelectedAccount(); 
     form.Account = accountToEdit; 
     // or: GetLastAddedAccount if you only want to edit the last added one 

     var dlgResult = form.ShowDialog(this); 
     if (dlgResult == DialogResult.OK) 
     { // extract the edited Account from the form: 
      Account editedData = form.Account; 
      this.UpdateSelectedAccount(editedData); 
     } 
    } 
} 

は通常、挿入および抽出アカウントの代わりに別途プロパティをアカウントごとにアクセスするプロパティとのインタフェースを持っていることを決定します。これにより、このアカウントのすべての(ソフトウェア)ユーザを変更することなく、アカウントの内部を変更することができます

+0

これを書くには時間がかかりますが、まだそれを使用する方法はわかりません。明らかに間違っている+私はそれが私がしようとしているものの正しいコードであるか分からない。 ここにGUIのイメージがあります(私の心に理解しやすいはずです): [Form1](https://pasteboard.co/GEQFjev.png) [Form2](https://pasteboard.co/GEQG0Fp .png) [Form3](https://pasteboard.co/GEQGaiQ.png) –

関連する問題