Laden...

[gelöst] ListView Column Header not sizeable

Erstellt von Aldo_Raine vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.041 Views
A
Aldo_Raine Themenstarter:in
38 Beiträge seit 2009
vor 14 Jahren
[gelöst] ListView Column Header not sizeable

Morgen,

wie ist es möglich das ich bei einer ListView die Column Header fixiere, damit der Anwender sie nicht mehr verschieben kann, entweder im Designer oder per Code!?

Gruß Aldo

Wenn du einen verhungernden Hund aufliest und machst ihn satt, dann wird er dich nicht beissen. Das ist der Grundunterschied zwischen Hund und Mensch.

Mark Twain (30. November 1835 - 21. April 1910)

916 Beiträge seit 2008
vor 14 Jahren

Ich glaube das ist Standartmäßig nicht möglich. Ein DataGridView kann das aber beim ListView musst du wohl selber was machen.

Schau dir mal das an, ist zwar VB sollte leicht zu integrieren sein. Die zapfen die WinAPI an.

Again what learned...

A
Aldo_Raine Themenstarter:in
38 Beiträge seit 2009
vor 14 Jahren

alles klar hab das Problem gelöst!


private void pingListView_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
        {
            MessageBox.Show("to change the column size is not allowed");
            e.Cancel = true;
        }

Gruß Aldo

Wenn du einen verhungernden Hund aufliest und machst ihn satt, dann wird er dich nicht beissen. Das ist der Grundunterschied zwischen Hund und Mensch.

Mark Twain (30. November 1835 - 21. April 1910)

916 Beiträge seit 2008
vor 14 Jahren

damit der Anwender sie nicht mehr verschieben kann

Gelöst würde ich das zwar nicht nennen aber so wird es auch verhindert. Nur schön finde ich das nicht.

Again what learned...

A
Aldo_Raine Themenstarter:in
38 Beiträge seit 2009
vor 14 Jahren

Ich habe es noch ein wenig abgeändert:


private void pingListView_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
        {
            e.Cancel = true;
            e.NewWidth = pingListView.Columns[e.ColumnIndex].Width;

        }

Ich denke das man das so als gelöst betrachten könnte, da es kurz und knapp genau das unterbindet was der Anwender nicht darf, weil es zu keinem Zeitpunkt in meinem Programm nötig ist die columns zu verschieben!

Was ist den Falsch an der Lösung?

Gruß Aldo

Wenn du einen verhungernden Hund aufliest und machst ihn satt, dann wird er dich nicht beissen. Das ist der Grundunterschied zwischen Hund und Mensch.

Mark Twain (30. November 1835 - 21. April 1910)

916 Beiträge seit 2008
vor 14 Jahren

So find ich es akzeptabel. Ich fand nur die Lösung mit der MessageBox komisch. Jedesmal wenn der USer die Column Resizen will blobt eine MessageBox auf. In wie weit die Zeile

e.NewWidth = pingListView.Columns[e.ColumnIndex].Width;

nötig ist weiß ich nicht, weil doch eigentlich das e.cancel den Changing vorgang unterbindet.

Again what learned...

A
Aldo_Raine Themenstarter:in
38 Beiträge seit 2009
vor 14 Jahren

Ne, das stimmt nicht so ganz!
Habe das nur mit e.cancel = True; probiert, da ist gar nichts passiert, man kann die spalten beliebig verschieben. Erst mit dem zusatz der MessageBox bzw. mit e.NewWidth passiert etwas...

Wenn du einen verhungernden Hund aufliest und machst ihn satt, dann wird er dich nicht beissen. Das ist der Grundunterschied zwischen Hund und Mensch.

Mark Twain (30. November 1835 - 21. April 1910)

916 Beiträge seit 2008
vor 14 Jahren

Das stimmt nicht ganz! Und zwar ist das OnColumnWidthChanging Event dafür da mitzubekommen wenn der User dabei ist die Breite zu ändern. Daher wenn du dort

e.Cancel = true;

schreibst, dann wird einfach nur nicht die neue breite gezeichnet. Wenn du nun noch das OnColumnWidthChanged Event abfängst kannst du dort einfach die Breite zurück setzen.


foreach (ColumnHeader column in listView.Columns)
{
    column.Tag = column.Width;
}


void listViewColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
    listView.Columns[e.ColumnIndex].Width = (int)listView.Columns[e.ColumnIndex].Tag;
}

void listViewColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
{
    e.Cancel = true;
}


So funktioniert es und ich find es sauberer, weil du nur dann die breite neu setzt wenn der User die Maus los lässt.

Again what learned...

A
Aldo_Raine Themenstarter:in
38 Beiträge seit 2009
vor 14 Jahren

oh alles klar werds mal grade so bei mir einbauen, ich will ja schließlich eine saubere Lösung!!! Vielen Dank!

Gruß Aldo

Wenn du einen verhungernden Hund aufliest und machst ihn satt, dann wird er dich nicht beissen. Das ist der Grundunterschied zwischen Hund und Mensch.

Mark Twain (30. November 1835 - 21. April 1910)