2

WPF Interop と Excel アドインに奇妙なバグがあります。私は.Net 3.5 SP1を使用しています。

Add-in Express を使用して、Excel 2003 のカスタム タスク ペインを作成しています。そのタスクペイン内で、ElementHost を使用して WPF UserControl をホストしています。UserControl には、TextBox と ComboBox を含む Grid が含まれているだけです。私の問題は、すべてが正しく表示されている間、下矢印の上にマウスを置いたままにしない限り、ComboBox がドロップダウンのままにならないことです。

Excel で WPF ウィンドウをモードレスで表示しようとしたときに同様の問題が発生したため、これが必ずしも Add-in Express に関連しているとは思いません。

2 つ目の問題は、ComboBox がフォーカスを放棄するのをためらっているように見えることです。クリックすると、テキスト領域が灰色になり、フォーカスがあることを示しますが、ウィンドウ内の他の場所にフォーカスを移動することはできません。フォーカスを奪う唯一の方法は、マウスホイールを動かすことです。

他の誰かが同様の問題を抱えていて、それを修正できましたか?

4

2 に答える 2

4

Add-in Express がこれを調査したところ、Excel に追加されるタスク ペインのウィンドウ スタイルに関係があることがわかりました。Windows の CreateParams で WS_CHILD フラグをオフにすると、コンボ ボックスやその他のポップアップが期待どおりに機能します。

彼らは、私の ADXExcelTask​​Pane に追加するコードのスニペットをくれました:

private const uint WS_CHILD = 0x40000000;
private const uint WS_CLIPCHILDREN = 0x02000000;
private const uint WS_CLIPSIBLINGS = 0x04000000;

private CreateParams _CreateParams = new CreateParams();
protected override CreateParams CreateParams
{
    get
    {
        _CreateParams = base.CreateParams;
        if (!DesignMode)
            _CreateParams.Style = (int)(WS_CLIPCHILDREN | WS_CLIPSIBLINGS); //| WS_CHILD

        return _CreateParams;
    }
}
于 2009-03-30T14:44:43.980 に答える
0

私も同じ問題を抱えていました。WinForm ユーザー コントロールでホストされている WPF ユーザー コントロールがあり、全体が Excel アドインです。Visual Studio 2010 と Excel 2007 および Excel 2010 を使用しています。

私の問題は、Excel シートを 1 回クリックすると、アドインが二度とフォーカスされないことでした。回避策を見つけました。

  1. WinForm ユーザー コントロールのコンストラクターで、WPF ユーザー コントロールのイベント MouseEnter に登録します。
  2. MouseEnter イベント ハンドラーで、自分にフォーカスを与えます (this.Focus())

    public WpfContainerUserControl()
    {
        InitializeComponent();
        GpecsBrowserTabUserControl gpecBrowser = elementHost1.Child as GpecsBrowserTabUserControl;
        gpecBrowser.MouseEnter += new System.Windows.Input.MouseEventHandler(gpecBrowser_MouseEnter);
    }
    
    void gpecBrowser_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        this.Focus();
    } 
    
于 2011-03-04T09:31:23.397 に答える