###実現したいこと
Visual Studio 2015 でC#を使用しシステムを開発しています。
現在、日々のトレーニングなどを記録するシステムのカレンダー部分を作っています。
実現したいことは、日付のlabelをクリックするとその日付の画面に飛び、その日の予定一覧が表示されることです。
日々の予定はPostgreSQLに格納していきます。
(テーブルの列 year(int) month(int) day(int) week(text) schedule1(text) schdule2 … schedule10)
これを実現させる方法として、以下を考えています。
例:画像1(2016年9月7日のlabelをクリックした場合
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Form1:画像1
If(選択した年月日のレコードが存在していない){
---レコードを作成(クリックしたlabelのyearとmonthとdayとweekを入れる)
}
year,month, dayをForm2に渡す。
Form2:画像2
下記のC#のソースに以下の2点を追加(下記のソースは追加を反映していないもの)。
- year,month,dayをForm1から受け取る。
- データ検索にてyear,month,dayをもとに検索
C#
1 private void connectDatebase() 2 { 3 StringBuilder sb = new StringBuilder(); 4 sb.Append("Server=localhost;"); 5 sb.Append("Port=5433;"); 6 sb.Append("User Id=postgres;"); 7 sb.Append("Password=****;"); //インストール時入れた値 8 sb.Append("Database=db_football;"); 9 10 string connString = sb.ToString(); 11 12 using (var con = new NpgsqlConnection(connString)) 13 { 14 try 15 { 16 con.Open(); 17 18 19 20 //データ検索 21 var cmd = new NpgsqlCommand(@"select schedule1,schedule2,schedule3,schedule4,schedule5,schedule6,schedule7,schedule8,schedule9,schedule10 from tb_calendar;", con); 22 var dataReader = cmd.ExecuteReader(); //クエリを取得 23 while (dataReader.Read()) //レコードを進める 24 { 25 26 label4.Text = dataReader["schedule1"].ToString(); 27 label5.Text = dataReader["schedule2"].ToString(); 28 label6.Text = dataReader["schedule3"].ToString(); 29 label7.Text = dataReader["schedule4"].ToString(); 30 label3.Text = dataReader["schedule5"].ToString(); 31 label9.Text = dataReader["schedule6"].ToString(); 32 label10.Text = dataReader["schedule7"].ToString(); 33 label11.Text = dataReader["schedule8"].ToString(); 34 label12.Text = dataReader["schedule9"].ToString(); 35 label13.Text = dataReader["schedule10"].ToString(); 36 } 37 38 39 } 40 catch (Exception e) 41 { 42 MessageBox.Show(e.ToString()); 43 } 44 } 45 }
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
例:画像1の2016年9月7日のlabelをクリックすると画像2のフォームに移動し、その日の予定が入ることです。
###「この質問の本題」
しかし、上記のことを実現するにはフォーム間で値(year,month,day,week)を受け渡さなければなりません。
実現する方法をお教えいただけないでしょうか?
もしくは上記(質問の最初に記述)実現したいことを可能にする別の良い方法があれば教えていただきたいです。
フォーム間での値の受け渡しを実現するために試したことは下記にまとめています。
###試したこと
- publicを使い下記のようにForm1,Form2に定義する(Form1、Form2別々の変数として扱われ失敗)
C#
1namespace CalendarDetails 2{ 3 public partial class CalendarDetails : Form 4 { 5 public int year; 6 public int month; 7 public int day; 8 public string week;
###補足情報(言語/FW/ツール等のバージョンなど)
- Visual Studio2015
- C#
- Postgres9.5
- Npgsql 3.1.9
- Form1,Form2ともに子フォーム、(親(メイン)フォームは別にある)
###現状のForm1の画面遷移部分
Visual
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using Nqgsql; 11 12namespace WindowsFormsApplication1 13{ 14 public partial class Calendar : Form 15 { 16 public Calendar() 17 { 18 InitializeComponent(); 19 } 20 21 22 23 private void button1_Click(object sender, EventArgs e)/戻るボタンの処理(今回の質問に関係なし) 24 { 25 Windows1.Menu menu = new Windows1.Menu(); 26 menu.Show(); 27 Close(); 28 } 29 30 private void label13_Click(object sender, EventArgs e)/日付ラベルをクリックするとその日の予定画面を開く 31 { 32 CalendarDetails.CalendarDetails calendardetails = new CalendarDetails.CalendarDetails(); 33 calendardetails.Show(); 34 Close(); 35 } 36 } 37}
回答1件
あなたの回答
tips
プレビュー