Balloon-Help im Usercontrol

gernegut

Gesperrt
Hallo,

bevor ich den Code poste ein paar Worte zu meinem Problem. Ich greife über die User32.Dll unter WinXP auf die Balloon-Tipps zu. Nun wollte ich mir ein Usercontrol erstellen das von der System.Windows.Forms.TextBox abgeleitet ist und eine Methode bietet eben diese Balloon-Tipps je nach Kontext anzuzeigen. Gesagt, getan. Die Balloon-Tipps werden aber nicht angezeigt wenn ich über eine Host-applikation die Methode meines Controls aufrufe !? Der Debuger läuft durch die Methode des/meines Usercontrols aber anstandslos durch ?! Binde ich diese Klassen aber in ein Windows.Form ein dann werden diese Balloon-Tipps aber angezeigt, die selbe Funktionalität. Hier der Code des abgeleiteten Controls:

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace myspace
{
public class stdTextBox : System.Windows.Forms.TexBox
{
private System.ComponentModel.Container components = null;

public enum TooltipIcon : int
{
None,
Info,
Warning,
Error
}

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
private struct EDITBALLOONTIP
{
public int cbStruct;
public string pszTitle;
public string pszText;
public int ttiIcon;
}

private const int ECM_FIRST = 0x1500;
private const int EM_SHOWBALLOONTIP = ECM_FIRST + 3;

[DllImport("User32", SetLastError=true)]
private static extern int SendMessage(
IntPtr hWnd,
int Msg,
int wParam,
IntPtr lParam);


public stdTextBox(System.ComponentModel.IContainer container)
{

container.Add(this);
InitializeComponent();

}

public stdTextBox()
{
InitializeComponent();
}

public void ErrorMsg(string errtitle, string errmsg)
{
EDITBALLOONTIP ebt = new EDITBALLOONTIP();

ebt.cbStruct = Marshal.SizeOf(ebt);
ebt.pszText = errmsg;
ebt.pszTitle = errtitle;
ebtiIcon = (int)TooltipIcon.Warning;

IntPtr ptrStruct = Marshal.AllocHGlobal(Marshal.SizeOf(ebt));
Marshal.StructureToPtr(ebt, ptrStruct, true);

int ret = SendMessage(this.Handle,
EM_SHOWBALLOONTIP,
0, ptrStruct);

Marshal.FreeHGlobal(ptrStruct);
}

Aufgerufen wird die Methode aus der Host-Applikation wie folgt:

private void stdTextBox1_Leave(object sender, System.EventArgs e)
{
if (stdTextBox1.Text != "14" && stdTextBox1.Text != "")
{
stdTextBox1.Focus();
stdTextBox1.ErrorMsg("Schwerwiegender Fehler","Hier darf nur die Bewertungskennziffer 15 eingegeben werden");
}

}

Danke und Gruß
 

Neue Beiträge

Zurück