2017-06-23 3 views
0

Wenn ich meine Windows Forms-Anwendung zum ersten Mal öffne, werden einige der Schaltflächen nicht richtig dargestellt. Wenn das Formular leicht verschoben wird, werden sie angezeigt.Schaltflächen leer, wenn die Windows Forms-Anwendung gestartet wird

Siehe unten.

before

nach dem Formular ziehen sie erscheinen.

after

Das ist mein Startcode.

Es ist kein großes Problem, nur nervig, weil ich keine Ahnung habe, warum es passiert.

Dies ist der Formularcode.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.status_CodesTableAdapter.Fill(this.supportDeskDataSet.Status_Codes); 
     this.systemsTableAdapter.Fill(this.supportDeskDataSet.Systems); 
     this.cases_Quick_ViewTableAdapter.Fill(this.supportDeskDataSet.Cases_Quick_View); 
     this.dataGridView1.DoubleBuffered(true); 
    } 

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     foreach (DataGridViewRow Myrow in dataGridView1.Rows) 
     {  
      if (Myrow.Cells[7].Value.ToString() == "High") 
      { 
       Myrow.DefaultCellStyle.BackColor = Color.Red; 
      } 
      else 
      { 
       Myrow.DefaultCellStyle.BackColor = Color.Green; 
      } 
      if(Myrow.Cells[2].Value.ToString() == "Back Burner") 
      { 
       Myrow.DefaultCellStyle.BackColor = Color.Gray; 
       Myrow.DefaultCellStyle.ForeColor = Color.White; 
      } 
     } 
    } 
} 
public static class DataGridViewExtensioncs 
{ 
    public static void DoubleBuffered(this DataGridView dgv, bool setting) 
    { 
     var dgvType = dgv.GetType(); 
     var pi = dgvType.GetProperty("DoubleBuffered", 
     BindingFlags.Instance | BindingFlags.NonPublic); 
     pi.SetValue(dgv, setting, null); 
    } 
} 
+2

Ich glaube nicht, dass das Problem in diesem Code ist ... machst du irgendetwas in Ihrem Formular Konstruktor oder 'Load' Ereignis? – Pikoh

+0

Ich stimme @Pikoh zu. Ihre Main-Methode sieht jedoch verdächtig aus. Sind Sie sicher, dass der Zweig mit SetForegroundWindow korrekt ist? – TcKs

+0

Ich glaube nicht, dass es @TcKs ist, es sollte etwas wie 'if (Process.GetProcessesByName (current.ProcessName) .Any()) {SetForegroundWindow (process.MainWindowHandle); '. Aber es hat nichts mit den Fragen zu tun :) – Pikoh

Antwort

1

Es scheint, dass zu viel in dataGridView1_CellFormatting das Problem verursacht.

skaliert ich den Code unten zu:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    foreach (DataGridViewRow Myrow in dataGridView1.Rows) 
    {  
     if (Myrow.Cells[7].Value.ToString() == "High") 
     { 
      Myrow.DefaultCellStyle.BackColor = Color.Red; 
     } 
     //else 
     //{ 
     // Myrow.DefaultCellStyle.BackColor = Color.Green; 
     //} 
     if(Myrow.Cells[2].Value.ToString() == "Back Burner") 
     { 
      Myrow.DefaultCellStyle.BackColor = Color.Gray; 
      Myrow.DefaultCellStyle.ForeColor = Color.White; 
     } 
    } 
} 

und stellen Sie die Standardzeile Farbe Grün statt und jetzt funktioniert es ohne Probleme.

+3

Sie müssen keine foreach im 'CellFormatting' Event machen. Das ist wahrscheinlich das Problem. In 'DataGridViewCellFormattingEventArgs' erhalten Sie die Zeile, die gerade bearbeitet wird, und diese müssen Sie ändern. Dies würde offensichtlich das Raster verlangsamen – Pikoh

Verwandte Themen