Logged il problema con Microsoft qui - la Repro è disponibile per il download: https://connect.microsoft.com/VisualStudio/feedback/details/741454/value-change-event-doesnt-fire-for-datetimepicker-controls-used-in-vsto-add-insERRORE: Cant scegliere date su un DatePicker che cadono fuori di un galleggiante VSTO Add-In
Se si mette un DateTimePicker in un VSTO Excel galleggiante Aggiungi -In e posizionarlo in modo che quando il calendario si abbassa, è al di fuori del bordo del componente aggiuntivo, vedere qui:
Scegliendo una delle date cerchiate nelle opere verdi come previsto, ma quando facendo clic su qualsiasi data cerchiata in rosso, si chiude semplicemente il calendario a tendina e non imposta la data!
Qualcuno sa come posso risolvere questo problema?
EDIT
Questo SO utente ha sperimentato il problema utilizzando WPF: VSTO WPF ContextMenu.MenuItem Click outside a TaskPane not raised
La risposta a questa domanda mostra il problema è stato segnalato per collegare un po 'indietro, ma ancora non soluzione 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
una delle soluzioni è quella di utilizzare il DispatcherFrame per pompare messaggi e iscriversi a GotFocusEvent e LostFocusEvent per il menu. 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 ma questo è tutto il codice WPF per menu non è una soluzione per Winform DateTimePicker.
Repro per Microsoft Connect:
Nuovo progetto> 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;
}
Menu File> Aggiungi> Nuovo progetto> Libreria di classi> di nome TaskPane
Poi nel Il progetto TaskPane crea un controllo utente chiamato 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; }
}
}
Successivo creare un controllo utente con un DateTimePicker, assicurarsi che il controllo Calendar si trova verso il basso a destra del controllo utente
public partial class TaskPaneCtrl : UserControl
{
public TaskPaneCtrl()
{
InitializeComponent();
}
}
F5 e fare clic sul controllo di calendario, ora provare a selezionare una data che è al di fuori della area del taskpane. Nessun evento di modifica del valore, si comporta come un clic fuori dal calendario!
Nota: Ho provato un downlist goccia che cade il controllo, ma i suoi eventi FARE FUOCO!
+1 Fantastico! Legge come un SOX (Visual KB?), Se funziona quando lo provo il lunedì, nessuna parola può esprimere la mia gratitudine. Livello –
di eccezionale superamento. Bello Hans –