roker002
Commander
- Registriert
- Dez. 2007
- Beiträge
- 2.061
Ich habe ein kleines Problem. Ich versuche einen ToolTip zu erweitern, damit man die inhalte dynamisch ändern kann (möglichst mit visual designer). Deswegen habe ich mir eine komponente zusammengebaut die den Titel und Icon des Tooltips je nach object ändert.
Nur das Problem... wenn ich versuche zu debuggen, dann erreiche ich den einsprungspunkt nicht!
Mein Code
Offenbar werden die Ereignisse nicht ausgelöst.
Habe ich da jetzt irgendwas falsches gemacht! Ich muss ja wenn ein ToolTip angezeigt werden sollte den Control raushollen von welchem jetzt der ToolTip das kommt. Aber kann sein dass jetzt Custom Eventhandler einfach nicht initialisiert wird! hat da jemand einen Fehler entdeckt?
Das andere Problem Taucht auf wenn ich den Icon anzeigen lassen will. Im designer lässt sich alles regeln. Sobald ich versuche das Programm auszuführen stürzt mir der VS ab!
Jeder kann das mal ausprobieren wenn man die Kommentierung wegmacht (oben bei der Klasse)
Hmm schade... das es nicht funktioniert!
Nur das Problem... wenn ich versuche zu debuggen, dann erreiche ich den einsprungspunkt nicht!
Mein Code
Code:
namespace MyToolTip
{
//[System.ComponentModel.ProvideProperty("ToolTipsIcon", typeof(System.Windows.Forms.Control))]
[System.ComponentModel.ProvideProperty("ToolTipsTitle", typeof(System.Windows.Forms.Control))]
public class ExtToolTips : System.Windows.Forms.ToolTip, System.ComponentModel.IExtenderProvider
{
/// <summary>
/// Liste mit Titeln von Tooltips
/// </summary>
private System.Collections.Generic.Dictionary<System.Windows.Forms.Control, string> Header;
/// <summary>
/// Liste mit allen Objecten und derer Icons.
/// </summary>
private System.Collections.Generic.Dictionary<System.Windows.Forms.Control, System.Windows.Forms.ToolTipIcon> Icons;
/// <summary>
/// Standard Text für den Titel
/// </summary>
private String StdHeader = "Info";
/// <summary>
/// Eventhandler der dafür verantwortlich ist dass
/// der Titel für ToolTip speziel für gewünschten Object angezeigt wird.
/// </summary>
public event EventHandler TitleChanged;
/// <summary>
/// Eventhandler der dafür verantwortlich ist dass
/// der Icon für ToolTip speziel für gewünschten Object angezeigt wird.
/// </summary>
public event EventHandler IconsChanged;
/// <summary>
/// Constructor für Erweiterten ToolTip
/// </summary>
public ExtToolTips()
{
Header = new Dictionary<System.Windows.Forms.Control, string>();
Icons = new Dictionary<System.Windows.Forms.Control, System.Windows.Forms.ToolTipIcon>();
}
/// <summary>
/// Auf Welches Control Element dieser ToolTip ansprechbar ist.
/// </summary>
public bool CanExtend(object extendee)
{
return (extendee is System.Windows.Forms.Control && (!(extendee is HelpTextLabel)) && (!(extendee is ExtToolTips)));
}
#region GETTER SETTER für ToolTipTitle
/// <summary>
/// Getter für den Titel des Tooltips
/// </summary>
[System.ComponentModel.Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(System.Drawing.Design.UITypeEditor)),
System.ComponentModel.DefaultValue("")]
public string GetToolTipsTitle(System.Windows.Forms.Control control)
{
try
{
if (Header.ContainsKey(control)) return Header[control];
}
catch (Exception e)
{
ErrorLog.WriteError(e);
}
return string.Empty;
}
/// <summary>
/// Speichert den ToolTip Titel bezüglich des Control Elements
/// </summary>
public void SetToolTipsTitle(System.Windows.Forms.Control control, string title)
{
if (title == null) title = this.StdHeader;
this.TitleChanged += new EventHandler(ToolTips_ChangeTitle);
Header[control] = title;
}
#endregion
#region SETTER GETTER ToolTipIcons
[System.ComponentModel.DefaultValue(System.Windows.Forms.ToolTipIcon.None)]
public System.Windows.Forms.ToolTipIcon GetToolTipsIcon(System.Windows.Forms.Control control)
{
System.Windows.Forms.ToolTipIcon result = System.Windows.Forms.ToolTipIcon.None;
try
{
if (Header.ContainsKey(control))
result = Icons[control];
}
catch (Exception e)
{
ErrorLog.WriteError(e);
}
return result;
}
public void SetToolTipsIcon(System.Windows.Forms.Control control, System.Windows.Forms.ToolTipIcon icon)
{
Icons[control] = icon;
this.IconsChanged += new EventHandler(ToolTips_ChangeIcon);
}
#endregion
#region Event Handler des Systems
public void ToolTips_ChangeTitle(Object sender, EventArgs e)
{
if(!(sender is ExtToolTips))
base.ToolTipTitle = GetToolTipsTitle((System.Windows.Forms.Control)sender);
}
public void ToolTips_ChangeIcon(Object sender, EventArgs e)
{
if (!(sender is ExtToolTips))
{
base.ToolTipIcon = GetToolTipsIcon((System.Windows.Forms.Control)sender);
}
}
#endregion
}
}
Offenbar werden die Ereignisse nicht ausgelöst.
Habe ich da jetzt irgendwas falsches gemacht! Ich muss ja wenn ein ToolTip angezeigt werden sollte den Control raushollen von welchem jetzt der ToolTip das kommt. Aber kann sein dass jetzt Custom Eventhandler einfach nicht initialisiert wird! hat da jemand einen Fehler entdeckt?
Das andere Problem Taucht auf wenn ich den Icon anzeigen lassen will. Im designer lässt sich alles regeln. Sobald ich versuche das Programm auszuführen stürzt mir der VS ab!
Jeder kann das mal ausprobieren wenn man die Kommentierung wegmacht (oben bei der Klasse)
Hmm schade... das es nicht funktioniert!