none
GridView - Zellinhalte werden unscharf /C#/WinForms RRS feed

  • Frage

  • Folgender Code liest eine Textdatei in eine GridView ein. Wenn ich den Scrollbalken betätige, um alle Zeilen anzuzeigen, entsteht ein unschöner Effekt:

    Warum ist dem so? Wie kann ich das abstellen ? Hier der Code:

    using System;
    using System.Drawing;
    using System.IO;
    using System.Windows.Forms;
    using System.Linq;
    
    namespace ChessGUI {
        public partial class Partien : Form {
            private DataGridView DataGridView_Edit = new DataGridView();
            public Partien() {
                InitializeComponent();
                DataGridView_Edit.CellClick += DataGridView_Edit_CellClick;
            }
    
            private void SetupDataGridView_Edit() {
                this.Controls.Add(DataGridView_Edit);
                DataGridView_Edit.ColumnCount = 2;
                DataGridView_Edit.Name = "DataGridView_Edit";
                DataGridView_Edit.Location = new Point(100, 100);
                DataGridView_Edit.Size = new Size(500, 400);
                DataGridView_Edit.ReadOnly = true;
                DataGridView_Edit.AllowUserToDeleteRows = false;
                DataGridView_Edit.AllowUserToAddRows = false;
                DataGridView_Edit.Columns[0].Name = "Counter";
                DataGridView_Edit.Columns[1].Name = "Datum/Züge";
                DataGridView_Edit.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            }
    
            private void Partien_Load(object sender, EventArgs e) {
                string username = Environment.UserName;
                string path = @"C:\Users\" + username + @"\ChessGUI\";
                string strPath = path + "moves.log";
                this.SetupDataGridView_Edit();
                if (File.Exists(strPath)) {
                    var zeilen = File.ReadAllLines(strPath);
                    for (int i = 0; i < zeilen.Length; i++) {
                        if (i < zeilen.Length - 1)
                            DataGridView_Edit.Rows.Add(i + 1, zeilen[i], zeilen[i + 1]);
                        else
                            DataGridView_Edit.Rows.Add(i + 1, zeilen[i], zeilen[zeilen.Length - 1]);
                    }
                } else {
                    SchachGUI form = new SchachGUI();
                    string message = "Die Datei " + strPath + " existiert nicht";
                    form.Ausgabe(message, "Warnung", MessageBoxIcon.Warning);
                    return;
                }
                int spalte = 1, counter = 0;
                if (DataGridView_Edit.Rows.Count > 1) {
                    foreach (DataGridViewRow row in DataGridView_Edit.Rows) {
                        if (row.Cells[spalte].Value.ToString().Contains("White"))
                            DataGridView_Edit.Rows[counter].DefaultCellStyle.BackColor = Color.Beige;
                        else if (row.Cells[spalte].Value.ToString().Contains("Black"))
                            DataGridView_Edit.Rows[counter].DefaultCellStyle.BackColor = Color.Transparent;
                        else
                            DataGridView_Edit.Rows[counter].DefaultCellStyle.BackColor = Color.Gray;
                        counter++;
                    }
                }
                DataGridView_Edit.ClearSelection();
                DataGridView_Edit.Columns.Cast<DataGridViewColumn>().ToList().ForEach(f => f.SortMode = DataGridViewColumnSortMode.NotSortable);
    
            }
            private void DataGridView_Edit_CellClick(object sender, DataGridViewCellEventArgs e) {
                DataGridView_Edit.ClearSelection();
            }
        }
    }


    • Bearbeitet tklustig Freitag, 5. Juli 2019 18:40
    Freitag, 5. Juli 2019 18:39

Antworten

  • Seltsamerweise verschwindet dieses Phänomen, sofern ich folgende Farbwerte verwende:

              foreach (DataGridViewRow row in DataGridView_Edit.Rows) {
                        if (row.Cells[spalte].Value.ToString().Contains("White"))
                            DataGridView_Edit.Rows[counter].DefaultCellStyle.BackColor = Color.FromArgb(206, 246, 206);
                        else if (row.Cells[spalte].Value.ToString().Contains("Black"))
                            DataGridView_Edit.Rows[counter].DefaultCellStyle.BackColor = Color.FromArgb(206, 227, 246);
                        else
                            DataGridView_Edit.Rows[counter].DefaultCellStyle.BackColor = Color.FromArgb(242,245,169);
                        counter++;
                    }

    Was hat das eine mit dem anderen zu tun?

    • Als Antwort markiert tklustig Sonntag, 7. Juli 2019 14:25
    Freitag, 5. Juli 2019 19:01