2 Stimmen

Haben ListView-Spalten eine maximale Länge, die sie anzeigen können?

Ich stoße auf ein seltsames ListView Problem und werde mein Bestes tun, um es zu erklären. Ich habe eine ListView mit 4 Spalten, die letzte ist eine Nachricht Zeichenfolge von unterschiedlicher Länge. Ich habe einige Funktionen, die das ListView-Element rot ändern wird, wenn es bestimmte Schlüsselwörter (Fail, Ausnahme, ect) enthält.

Ich habe dieses Problem zum ersten Mal bemerkt, als ein Element rot war und ich kein Wort in der Spalte sah, das den roten Farbcode auslösen würde. Also habe ich die Länge der eingehenden Zeichenfolge dem Element vorangestellt und ein Textfeld hinzugefügt, das den Text der Spalte anzeigt, wenn er ausgewählt wird. Was ich fand, war, dass die vorangestellte Länge (tatsächliche Länge der eingehenden Zeichenfolge) wäre wie 953, die extrahierte ListViewItem's Text Länge wäre 960 (str Länge + vorangestellte Länge info), aber der Text, der in der Textbox wäre die Länge war 253...

Was ist hier eigentlich los? Seine wie der ganze Text machte es in die ListViewItem, aber es kann/wird nicht zeigen es alle (und nein, seine nicht Spaltenbreite, ich hatte es auf über 1000 im obigen Fall festgelegt).

Hinzufügen des ListViewItems und Überprüfung auf Fehlerstrings:

ListViewItem listItem = new ListViewItem(msg.Date);

// Add sub-items for Details view.
listItem.SubItems.Add(msg.Time);
listItem.SubItems.Add(msg.Thread);
listItem.SubItems.Add("L: " + msg.Message.Length + " " + msg.Message);                        

if (!msg.Message.Contains("FA_FAILCNT"))
{
    if (msg.Message.Contains("fail", StringComparison.OrdinalIgnoreCase) ||
        msg.Message.Contains("exception", StringComparison.OrdinalIgnoreCase) ||
        msg.Message.Contains("db q", StringComparison.OrdinalIgnoreCase))
    {
        listItem.Font = new Font(listItem.Font, FontStyle.Bold);
        listItem.ForeColor = Color.Red;
    }
    else
        listItem.ForeColor = Color.Black;
}

Offensichtlich ist die letzte Unterposition, die mir die Probleme gibt (die eine, die msg.Message erhält)

EDIT: So ein Quatsch, Das erklärt es .... Gibt es eine Möglichkeit, dies zu umgehen?

3voto

Justin Punkte 82143

Sie haben bereits den Grund gefunden, warum nicht der gesamte Text angezeigt wird.

Die beste Lösung, die ich bisher gefunden habe, ist, die Informationen in die QuickInfo zu stellen, so dass die gesamte Zeichenfolge sichtbar ist, wenn der Benutzer mit der Maus über die Spalte fährt - siehe Der Text der Unterpunkte der Listenansicht wird in der Benutzeroberfläche nicht vollständig angezeigt, obwohl die Länge des Textes korrekt ist .

Eine andere Möglichkeit, die ich gesehen habe, ist, dass Benutzer den Wert einer Zelle kopieren können. Obwohl der angezeigte Text abgeschnitten ist, können Sie durch Kopieren und Einfügen des Zellwerts in eine andere Anwendung den vollständigen Text anzeigen.

Ich stelle mir vor, dass die einzige andere "Problemumgehung" das Schreiben Ihrer eigenen Steuerung beinhalten würde - alternativ glaube ich nicht, dass das ListView-Steuerelement in WPF diese gleiche Einschränkung hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X