Logged vấn đề với Microsoft ở đây - Repro hiện có sẵn để tải về: https://connect.microsoft.com/VisualStudio/feedback/details/741454/value-change-event-doesnt-fire-for-datetimepicker-controls-used-in-vsto-add-insBUG: Cant chọn ngày trên DatePicker nằm ngoài một nổi VSTO Add-In
Nếu bạn đặt một DateTimePicker trong một VSTO Excel thả nổi Thêm -Trong và định vị nó như vậy khi lịch giảm xuống, nó nằm ngoài rìa của add-in, xem tại đây:
Chọn bất kỳ ngày vòng quanh trong các công trình xanh như mong đợi, nhưng khi nhấp vào bất kỳ ngày nào được khoanh tròn bằng màu đỏ, nó chỉ đóng cửa sổ thả xuống lịch và không đặt ngày!
Có ai biết cách khắc phục sự cố này không?
EDIT
dùng SO này đã gặp phải sự cố sử dụng WPF: VSTO WPF ContextMenu.MenuItem Click outside a TaskPane not raised
Câu trả lời cho câu hỏi đó cho thấy vấn đề này đã được báo cáo để kết nối một khi trở lại nhưng vẫn không có giải pháp với 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
Một trong những cách giải quyết là sử dụng DispatcherFrame để bơm tin nhắn và đăng ký GotFocusEvent và LostFocusEvent cho 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 nhưng đây là tất cả mã WPF cho trình đơn không phải là giải pháp cho Winform DateTimePicker.
Repro cho Microsoft Connect:
New Project> 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> Add> New Project> Class Library> đặt tên taskpane
Sau đó, trong Dự án TaskPane tạo Điều khiển người dùng được gọi là 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; }
}
}
Tiếp theo, tạo một User Control với một DateTimePicker, đảm bảo sự kiểm soát Lịch nằm về phía góc dưới bên phải của điều khiển người dùng
public partial class TaskPaneCtrl : UserControl
{
public TaskPaneCtrl()
{
InitializeComponent();
}
}
F5 và nhấp vào Lịch kiểm soát, bây giờ cố gắng chọn một ngày đó là ngoài khu vực nhiệm vụ. Không có sự kiện Thay đổi giá trị nào kích hoạt, nó hoạt động giống như một cú nhấp chuột bên ngoài lịch!
Lưu ý: Tôi đã thử một danh sách thả xuống rơi khỏi tầm kiểm soát nhưng các sự kiện của nó CHÁY!
+1 Brilliant! Đọc như một SOX (Visual KB?), Nếu điều này làm việc khi tôi thử nó vào thứ hai, không có từ nào có thể bày tỏ lòng biết ơn của tôi. –
mức độ tuyệt vời exceeeded. tốt đẹp một Hans –