Forums Neueste Beiträge
 

WF: ComboBox mit DropDown Style ausgewählten Text ändern

26/02/2009 - 17:26 von Martin Horst | Report spam
Hi,

ich habe eine Windows Forms ComboBox mit dem DropDown Style, also mit
einem zusàtzlichen Textfeld. Wenn nun der Benutzer ein Element in der
Dropdown Liste auswàhlt, möchte ich nicht den ganzen Text anzeigen, der
darstellt wird, sondern nur einen Teil davon. Ich habe mich bereits in
etliche Events gehangen und dort den Text angepaßt. Aber die ComboBox
setzt den Text nachtràglich immer noch um. Wo kann ich nun am besten
eingreifen, um den Text anzupassen.

Danke
Martin
 

Lesen sie die antworten

#1 Frank Dzaebel
28/02/2009 - 08:34 | Warnen spam
Hallo Martin,

ich habe eine Windows Forms ComboBox mit dem DropDown Style, also mit
einem zusàtzlichen Textfeld. Wenn nun der Benutzer ein Element in der
Dropdown Liste auswàhlt, möchte ich nicht den ganzen Text anzeigen,
der darstellt wird, sondern nur einen Teil davon. Ich habe mich
bereits in etliche Events gehangen und dort den Text angepaßt. Aber
die ComboBox setzt den Text nachtràglich immer noch um. Wo kann ich
nun am besten eingreifen, um den Text anzupassen.



Das ist eigentlich so nicht supported. Es gibt die
FormattingEnabled Eigenschaft, aber die ist für
diesen Zweck IMHO nicht zielführend.
Da könntest zum Beispiel über SendMessage
eingreifen - nur ganz grob zur möglichen Funktion:

using System;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

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

class MyCombo : ComboBox
{
const int WM_SETTEXT = 0xc;
const int WM_PAINT = 0xf;

[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg,
IntPtr wParam, StringBuilder lParam);


protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PAINT)
{
StringBuilder sb = new StringBuilder();
string txt = UmwandlungDesTextes();
sb.Append(txt);
if (Text != txt && txt != null)
SendMessage(this.Handle, WM_SETTEXT, IntPtr.Zero, sb);
}
base.WndProc(ref m);
}

private string UmwandlungDesTextes()
{
switch (SelectedIndex)
{
case 0: return "Punkt 1";
case 1: return "Punkt 2";
case 2: return "Punkt 3";
case 3: return "Punkt 4";
default:return null;
}
}
}

private void Form1_Load(object sender, EventArgs e)
{
MyCombo cbo = new MyCombo();
cbo.Items.Add("Erster kleiner Satz");
cbo.Items.Add("Zweiter kleiner Satz");
cbo.Items.Add("Dritter kleiner Satz");
cbo.Items.Add("Vierter kleiner Satz");
Controls.Add(cbo);
cbo.SelectedIndex = 0;
cbo.Text = Text;
}
}
}

Ähnliche fragen