タイトルの通り、フォームアプリケーション内で、ボタンの色を変更する関数があります。
その関数で、ボタンのBackCollarが変更できません。
具体的には、
アプリを起動してから、一回目の操作では色が変わらないのですが、二回目以降は色が変わります。
また、デバックモードでは一回目も二回目以降も同様に色が変わるのですが、
インストーラーを作成して、タブレットにインストールしたのちにアプリケーションを立ち上げて実行すると、色が変わらない問題が起きます。
対策は、
関数の最後に、Refresh()、Application.DoEvents()を追加しましたが、色の変更はできませんでした。
また、関数を使わずにボタンの色の変更を書きましたが、それでも変更できませんでした。
以下にボタンの色の変更をする関数を示します。
namespace fghlib { public partial class Form020 : Form { public Form020(Form000 form) { InitializeComponent(); } private void Form020_Load(object sender, EventArgs e) { //データベースからデータの取得 Btn001.UseVisualStyleBackColor = false; Btn002.BackColor = Btn005.BackColor; Btn002.UseVisualStyleBackColor = true; Btn003.BackColor = Btn005.BackColor; Btn003.UseVisualStyleBackColor = true; DataGridViewSort(); DataGridView1.CurrentCell = null; } private void Btn001_Click(object sender, EventArgs e) { //データベースからデータの取得 SelectedRows.Clear(); DataGridView1.CurrentCell = null; DataGridViewSort(); Btn001Color(); this.Invalidate(); Btn002.Enabled = true; Btn003.Enabled = true; } private void Btn002_Click(object sender, EventArgs e) { //データベースからデータの取得 DataGridView1.DataSource = dt; DataGridView1.CurrentCell = null; SelectedRows.Clear(); DataGridViewSort(); Btn001Color(); } private void Btn003_Click(object sender, EventArgs e) { //データベースからデータの取得 DataGridView1.DataSource = dt; DataGridView1.CurrentCell = null; SelectedRows.Clear(); DataGridViewSort(); Btn001Color(); } private void Btn001Color() { //データベースからデータの取得 if (dt.Rows.Count > 0) { Btn001.BackColor = Color.LawnGreen; foreach (DataGridViewRow r in DataGridView1.Rows) { if (r.Cells["kaisi"].Value.ToString() != "" && r.Cells["owari"].Value.ToString() == "") { r.Cells["joutai"].Style.BackColor = Color.LawnGreen; } } } else { Btn001.BackColor = Btn005.BackColor; Btn001.UseVisualStyleBackColor = false; foreach (DataGridViewRow r in DataGridView1.Rows) { r.Cells["joutai"].Style.BackColor = Color.White; } } Btn001.Refresh(); DataGridView1.Refresh(); Application.DoEvents();// 色がつかない対策 } } }
データグリッドビューから取得したデータをもとに、色の変更の可否を判断します。
ボタンの色の変更と同時にデータグリッドビュー内の色の変更も行っています。
以上の関数はデータベースがに変更があったときに呼び出します。
ソフト上で複数のボタンがあり、ボタン1つ1つでデータベースへ行の追加や削除ができるよう処理が異なります。
そのため、逐一ボタンの処理が終わった後に関数を呼び出し、対象の行があればBtn001の色が変わるようになっています。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー