protokolliert das Problem mit Microsoft hier - die Repro zum Download zur Verfügung: https://connect.microsoft.com/VisualStudio/feedback/details/741454/value-change-event-doesnt-fire-for-datetimepicker-controls-used-in-vsto-add-insBUG: Cant wählen Daten auf einem Datepicker, die außerhalb eines Sturzes schwebenden VSTO Add-In
Wenn Sie ein Datetimepicker in einem Excel VSTO setzen floating hinzufügen -In und so positionieren, wenn der Kalender nach unten fällt, ist es außerhalb der Kante des Add-in finden sie hier:
einem der Termine die Wahl in den grünen Arbeiten eingekreist wie erwartet, aber wenn Wenn Sie auf ein Datum klicken, das rot eingekreist ist, wird nur das Kalender-Drop-Down-Menü geschlossen und das Datum nicht eingestellt!
Weiß jemand, wie ich das beheben kann?
EDIT
Dieser SO Benutzer hat das Problem mit WPF erfahren: VSTO WPF ContextMenu.MenuItem Click outside a TaskPane not raised
Die Antwort auf diese Frage zeigt das Problem gemeldet wurde eine Weile zurück zu verbinden, aber immer noch nicht Lösung mit VSTO 4.0 SP1: https://connect.microsoft.com/VisualStudio/feedback/details/432998/excel-2007-vsto-custom-task-pane-with-wpf-context-menu-has-focus-problems
Eine der Problemumgehungen ist die Verwendung der DispatcherFrame, um Nachrichten zu pumpen und GotFocusEvent und LostFocusEvent für das Menü zu abonnieren. http://blogs.msdn.com/b/vsod/archive/2009/12/16/excel-2007-wpf-events-are-not-fired-for-items-that-overlap-excel-ui-for-wpf-context-menus.aspx aber das ist alles WPF-Code für Menüs nicht eine Lösung für WinForm DateTimePicker.
Repro für Microsoft Connect:
Neues Projekt> Excel 2010 Add-In
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
//setup custom taskpane
MyTaskView = new TaskPaneView();
MyTaskView.currentInstance = Globals.ThisAddIn.Application;
MyTaskPane = this.CustomTaskPanes.Add(MyTaskView, "MyTaskView");
MyTaskPane.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionFloating;
MyTaskPane.DockPositionRestrict = MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;
MyTaskPane.Visible = true;
}
Datei-Menü> Hinzufügen> Neues Projekt> Klassenbibliothek> genannt TaskPane
dann in der TaskPane Projekt erstellen ein Benutzersteuerelement namens TaskPaneView
public partial class TaskPaneView : UserControl
{
public TaskPaneView()
{
InitializeComponent();
}
public Microsoft.Office.Interop.Excel.Application currentInstance { get; set; }
public TaskPaneCtrl getTaskPaneCtrl
{
get { return this.taskPaneCtrl1; }
}
}
Next ein User Control mit einem Datetime erstellen, stellen Sie sicher, dass die Kalender-Steuerelement in Richtung der unteren rechten Ecke des Steuer Benutzer befindet
public partial class TaskPaneCtrl : UserControl
{
public TaskPaneCtrl()
{
InitializeComponent();
}
}
F5 und die Kalender-Steuerelement klicken, wird nun versuchen, ein Datum zu wählen, die außerhalb der ist Aufgabenbereich. Kein Wert Das Ereignis wird ausgelöst, es verhält sich wie ein Klick außerhalb des Kalenders!
Hinweis: Ich habe versucht, eine Drop-Down-Liste, die von der Kontrolle fällt, aber ihre Ereignisse DO FIRE!
+1 Brilliant! Liest wie ein SOX (Visual KB?), Wenn das funktioniert, wenn ich es am Montag versuche, können keine Worte meine Dankbarkeit ausdrücken. –
Niveau der ehrfürchtigen überschritten. Netter Hans –