G3016_Goma_note_いろいろな機能実験
2025年2月22日
13:20
G3016_pc_goma_note_etc_function_report
説明
前前回(メモ管理)の時はグリッドの階層を使っていました
メインフォームのサイズ変更
フォームの位置とサイズを設定する - Windows Forms .NET | Microsoft Learn
実験でいろいろな機能をテストするため、いちいちIDは変更しません
メインフォームのサイズをパラメータに追加します
Prm_dat_upd("メインサイズX", "400");
Prm_dat_upd("メインサイズY", "400");
button1_Click(null, null);
ダブルクリックで自動生成されたイベント関数はコメントにします
このままでは不便なので、関数を作ってみます
これが成功しました、そうすると関数にサイズを直接指示できるか試します
Main_form_size(80,570);
// メインフォームのサイズ変更をします
private void Main_form_size(int prm_x,int prm_y) => Size = new Size(prm_x,prm_y);
これで完成だと思います、ボタンは解放しておきます
フォームに配置された部品のサイズ変更は簡単でした
listBox1.Size = new Size(100,100); // リストボックスのサイズ変更
// 実験用ボタンのイベント関数です
private void button1_Click(object sender, EventArgs e)
{
Main_form_size(200, 400); // メインフォームサイズ変更
listBox1.Size = new Size(20, 20); // リストボックスのサイズ変更
}
コントロールの配列化
DataGridView クラス (System.Windows.Forms) | Microsoft Learn
フォーム上から消去する方法もテストします
リストボックスを同様の方法で配列化し月カレンダーをテストします
その前に、履歴バックアップしておきます
新しいフォームを追加します
実験ボタン②を使ってフォーム2を呼び出します
サブフォームを作ってリストボックスをデバッグモニタに使う問題が判明しました
int x,y,lin,column;
int x_siz = 150;
int y_siz = 150;
for (int i = 0; i < 31; i++)
{
Form1.Lst_tbl[i] = new ListBox();
this.Controls.Add(Form1.Lst_tbl[i]);
column = i % 7;
lin = i / 7;
x = column * x_siz + 10;
y = lin * y_siz + 10;
Form1.Lst_tbl[i].Location = new Point(x, y);
Form1.Lst_tbl[i].Size = new Size(x_siz, y_siz);
Form1.Lst_tbl[i].Items.Add((i+1).ToString()+" 日");
曜日で配置を変えます
デバッグモニタを修正して、メッセージボックスタイプにします
フォーム2からパラメータが呼べるか確認します
前回アプリから、カレンダーデータをコピーします
パラメータに「カレンダーフォルダ」を追加します
カレンダーパス変換関数をグローバル領域に作成します
// カレンダーファイルパス取得
public static string Cal_txt_fil_path_get(int prm_yy_all,int prm_mm,int prm_dd)
{
string fil_path = Prm_dat_get("カレンダーフォルダ") + @"\"
+ prm_yy_all.ToString("D4") + @"\" + "goma0099-"
+ prm_yy_all.ToString("D2") + "-" + prm_mm.ToString("D2")
+ "-" + prm_dd.ToString("D2") + ".txt";
return fil_path;
}
フォーム2からカレンダーファイルパスを取得してみます
カレンダーデータを読み込みし、表示してみます
共用関数のテキストファイル読み込みは種別指定を追加する必要があります
// テキストファイル読み込み
// テキストファイルの任意のカラムを1次元配列に代入する
public static int Com_txt_tbl_red(
string prm_fil_path,
int prm_tbl_no,
string[] prm_cst_tbl,
string prm_type) // "A" ANSI "U" UTF-8
{
// 他のフォームでも呼び出しが必要だったため、ここに移設した
// 将来は、ライブラリ機能を調べて、そちらに移植すべきものかもしれない
// 最低でも、昔のインクルードのような機能は調べたい
// プログラム全体で共通する処理の場合、コピペして行くと、修正箇所が無限に発生するからである
int cst_tbl_max = prm_cst_tbl.Length;
Encoding enc;
if (prm_type == "A")
enc = Encoding.GetEncoding("Shift_JIS");
else
enc = Encoding.GetEncoding("UTF-8");
string txt_buf;
int cnt = 0;
if (File.Exists(prm_fil_path) == true)
{
using (StreamReader red = new StreamReader(prm_fil_path, enc))
{
while (true)
{
if (red.EndOfStream == true) break;
txt_buf = red.ReadLine();
// フリー書式に対応するために、ない場合は空欄
prm_cst_tbl[cnt] = "";
if (prm_tbl_no < txt_buf.Split(',').Length)
prm_cst_tbl[cnt] = txt_buf.Split(',')[prm_tbl_no];
++cnt;
if (cst_tbl_max <= cnt) break; //オーバーフロー
}
}
}
return (cnt);
}
フォーム2のコードも修正します
フォーム1でも使っているので修正します
このように表示されます
バグ発見
for (int k = 0; k < cal_tbl.Length; k++) cal_tbl[k] = "";
dat_max = Form1.Com_txt_tbl_red(fil_path, 4, cal_tbl,"A");
ここまでのプロジェクトを公開ページにリンクしておきます
Version:0.9 StartHTML:00000000 EndHTML:00000000 StartFragment:00000000 EndFragment:00000000 G3016_プロジェクト