Définir également les valeurs de la zone de liste en C # avec la fonction PadLeft

Je lutte avec ma liste et mes valeurs dans la liste depuis un certain temps maintenant et je suis tombé sur un autre problème.

Je récupère les données de ma firebase database Access (les noms de champs et les valeurs) et les affiche dans une liste. J’essaie de définir les valeurs des noms de champ à droite du nom de champ sur une distance égale (afin qu’ils soient tous l’un en dessous de l’autre). J’essaie d’utiliser la fonction PadLeft pour cela, mais pour une raison quelconque, cela ne les décrit pas l’un en dessous de l’autre. Je pense que cela a quelque chose à voir avec la longueur des noms de champs.

Le résultat que je reçois avec cette ligne de code:

try { connection.Open(); OleDbCommand command = new OleDbCommand(); command.Connection = connection; ssortingng query = "select * from Sparen WHERE Id=1"; command.CommandText = query; OleDbDataReader reader = command.ExecuteReader(); var columns2 = listBox6; while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { columns2.Items.Add(reader.GetName(i) + reader.GetValue(i).ToString().PadLeft(15)); } } connection.Close(); } 

Est-ce: Exemple de listbox

Comme vous pouvez le voir, les grandes lignes des valeurs ne sont pas les unes en dessous des autres. Il semble que la longueur du nom de champ affecte le nombre de remplissage.

J’ai donc pensé résoudre ce problème en soustrayant le remplissage avec la longueur du nom du champ comme ceci:

 try { connection.Open(); OleDbCommand command = new OleDbCommand(); command.Connection = connection; ssortingng query = "select * from Sparen WHERE Id=1"; command.CommandText = query; OleDbDataReader reader = command.ExecuteReader(); int x; var columns2 = listBox6; while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { x = reader.GetName(i).Length; columns2.Items.Add(reader.GetName(i) + reader.GetValue(i).ToString().PadLeft(15 - x)); } } connection.Close(); } catch (Exception ex) { MessageBox.Show("Error" + ex); } 

Le résultat est le suivant:

exemple de listbox 2

Comme vous pouvez le constater, le nouveau code a eu un effet sur la différence, mais il n’a toujours pas fait ce qu’il était supposé faire. Le contour n’est toujours pas égal (l’un en dessous de l’autre). Quelqu’un a une idée de ce qui ne va pas ici?

Pour résoudre votre problème immédiat, utilisez simplement une police à largeur fixe dans le contrôle ListBox:

 listBox1.Font = new Font(FontFamily.GenericMonospace, listBox1.Font.Size); 

Maintenant, votre logique de remplissage fonctionnera comme prévu:

entrez la description de l'image ici

Considérons le sharepoint Hans cependant; vérifiez dans les contrôles qui affichent déjà plusieurs colonnes de données, telles que ListView ou DataGridView.

Ce que vous rencontrez résulte du fait que la police n’est pas à “largeur fixe”, de sorte que certains caractères sont plus larges que d’autres.

Le contrôle Zone de liste n’est pas conçu pour afficher plusieurs colonnes, c’est ce que vous recherchez ici. Je vous suggère d’utiliser plutôt un System.Windows.Forms.DataGridView .