Click-Event bei Expression Web händeln (Managed Add-in)

31/01/2009 - 23:42 von Stephan Janssen | Report spam
Hallo NG,
ich entwickle ein Managed Add-in für Expression Web 2 und versuche
verzweifelt DoubleClick-Events des gerade angezeigten Dokumentes zu hàndeln
(um je nach aktivem Element (z.B. Webbot) einen entsprechenden, eigenen
Dialog anzuzeigen).

Erste Versuche mit VBA waren erfolgreich:

Public WithEvents Document As DesignerDocument

Private Function Document_ondblclick() As Boolean
Debug.Print "Document_ondblclick()"

Dim doc As DesignerDocument
Set doc = ActivePageWindow.Document

Dim range As TextRange
Set range = doc.selection.createRange

Debug.Print range.htmlText

Document_ondblclick = True
End Function

Das unter C# zu schreiben war nicht weiter schwierig und funktioniert auch
prima, allerdings akzeptiert das Dokument nun keine Tastaturereignisse mehr
(man kann also nichts mehr eingeben). Bei VBA tritt dieser Effekt nicht auf.
Da die Dokumente bei xWeb das DOM Modell des IE unterstützen habe ich den
Trick wie unter http://www.west-wind.com/weblog/posts/393.aspx beschrieben
ausprobiert. Klappt aber auch nicht (Click-Ereignisse kommen nicht an, dafür
kann man jetzt wieder mit der Tastatur arbeiten...).

Mein letzter Stand - vereinfacht - sieht so aus (der aber nicht
funktioniert, Tastatur blockiert):

public void InitDocument(DesignerDocument document)
{
((HTMLDocumentEvents_Event)document).ondblclick += new
HTMLDocumentEvents_ondblclickEventHandler(Document_OnDoubleClick);
}

bool Document_OnDoubleClick()
{
//
return true;
}

InitDocument() wird immer dann aufgerufen wenn ein Dokument geöffnet wurde.

Nach etlichen Stunden des probierens bin ich einer Lösung, so es denn eine
gibt, keinen Schritt nàher gekommen.
Hat jemand eine Idee?

Stephan
 

Lesen sie die antworten

#1 Frank Dzaebel
01/02/2009 - 10:01 | Warnen spam
Hallo Stephan,

Das unter C# zu schreiben war nicht weiter schwierig und funktioniert
auch prima, allerdings akzeptiert das Dokument nun keine
Tastaturereignisse mehr (man kann also nichts mehr eingeben). Bei VBA
tritt dieser Effekt nicht auf. Da die Dokumente bei xWeb das DOM
Modell des IE unterstützen habe ich den Trick wie unter
http://www.west-wind.com/weblog/posts/393.aspx beschrieben
ausprobiert. Klappt aber auch nicht (Click-Ereignisse kommen nicht
an, dafür kann man jetzt wieder mit der Tastatur arbeiten...).



Allgemein wird oft bei der managed Addin-Entwicklung unter C#
vergessen, die Events auch wieder zu "unsubscriben".
So auch bei Ricks Artikel. Normalerweise bei den Unload-Events,
aber auch beim jedem DocumentCompleted einer Seite.
Dahinter steckt letztlich COM. Hier ein Beispiel mit dem WebBrowser.

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

private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.DocumentCompleted += new
WebBrowserDocumentCompletedEventHandler(
webBrowser1_DocumentCompleted);
webBrowser1.Navigate("http://www.test.de");
}

void webBrowser1_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.Document.Click -= new
HtmlElementEventHandler(Document_Click);
webBrowser1.Document.Click += new
HtmlElementEventHandler(Document_Click);
}

void Document_Click(object sender, HtmlElementEventArgs e)
{
ShowProperties(e);
}

private void ShowProperties(object obj)
{
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);
StringBuilder sb = new StringBuilder();
foreach (PropertyDescriptor pd in props)
sb.AppendFormat("{0} {1} = {2}; ",
pd.PropertyType, pd.Name,
(pd.GetValue(obj) == null ? "<Leer>" :
pd.GetValue(obj).ToString()));
MessageBox.Show(sb.ToString());
}
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen