AccessViolationException - Bug im Framework

11/12/2007 - 08:34 von Alexander Reifinger | Report spam
Hi,

in einer unserer Anwendungen haben wir eine TextBox, in die optionale
Daten eingetragen werden können. Aus Platzgründen ist diese im leeren
Zustand einzeilig, wenn der Benutzer Text eingibt "klappt" sie auf. Ich
habe das hier mal in einer kleinen Testanwendung zusammengeschrieben:

public class TestForm : Form {
private readonly TextBox textBox = new TextBox();

[STAThread]
public static void Main(string[] args) {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try {
Application.Run(new TestForm());
} catch(AccessViolationException e) {
Console.WriteLine(e);
}
}
public TestForm() {
this.Size = new Size(430, 150);
textBox.Bounds = new Rectangle(10, 10, 400, 20);
this.Controls.Add(textBox);
textBox.TextChanged += this.textBox_TextChanged;
textBox.Text="Bitte tippe jetzt einen Buchstaben";
textBox.Select(0,textBox.Text.Lenght);
}
private void textBox_TextChanged(object sender, EventArgs e) {
if(textBox.Text == ""
&& textBox.Multiline) {
Console.WriteLine("Ich werde klein");
textBox.ScrollBars = ScrollBars.None;
textBox.Multiline = false;
textBox.Height = 20;
}
if(textBox.Text != ""
&& !textBox.Multiline) {
Console.WriteLine("Ich werde gross");
textBox.ScrollBars = ScrollBars.Vertical;
textBox.Multiline = true;
textBox.Height = 52;
}
}
}

Nach dem Start ist die TextBox erwartungsgemàß gross und markiert. Tippe
ich nun z.B. "x" um den vorgegebenen Text zu ersetzen wird TextChanged
mit Text="" aufgerufen:

Ich werde klein

Die TextBox wird also klein gemacht. Anschließend versucht das Framework
wohl den neuen Text "x" zu setzen, dabei knallt es aber:

System.AccessViolationException: Es wurde versucht, im geschützten
Speicher zu lesen oder zu schreiben. Dies ist hàufig ein Hinweis darauf,
dass anderer Speicher beschàdigt ist.
bei System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr
wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
bei System.Windows.Forms.Control.DefWndProc(Message& m)
[...]
bei System.Windows.Forms.Application.Run(Form mainForm)

Hat jemand eine Idee was ich machen kann um den Bug zu umgehen? Google
findet jede Menge mit AutoComplete, aber es war leider nichts dabei was
mir weiterhilft. ;-(

Vielen Dank im Voraus,
Alexander Reifinger
 

Lesen sie die antworten

#1 Achim Bohmann
11/12/2007 - 09:49 | Warnen spam
Hallo!

also wenn ich auch noch keine Lösung finden konnte, so kann ich nach ein
paar Experimenten zumindest das Problem auf die Selektion des Textes
einschrànken. Wenn der markierte Text nicht komplett ersetzt wird, sondern
Zeichen für zeichen gelöscht, dann klappts ohne Fehler. Die Box wird dann
klein, und wenn wieder Text eingefügt wird, auch wieder groß.

Bleibt also noch die Frage offen, warum semmelt die Anwendung ab, wenn der
Text als ganzes ersetzt wird...

Viele Grüße
Achim

Ähnliche fragen