2017-07-31 24 views
0

現在、私のウィンドウのフォームの1つでMSChartsを使用しています。 MSChartsに関する奇妙なことの1つは、チャートにフォーカスがない限り、MouseWheelイベントをチャートでトリガーできないことです。これに対処するには、MouseEnterイベントをチャートに追加してからFocus()MouseWheelイベントを発生させるチャートを追加する必要があります(Enabling mouse wheel zooming in a Microsoft Chart Control参照)。Microsoft Charting Controlsの制御フォーカス

私は完全に別のウィンドウ(Window Aと呼ぶ)をプルアップすると、ちょうど私のチャートの前に部分的に(ウィンドウはWindow Bと呼ばれます)起こるとしましょう。私が誤ってマウスを図表の上にWindow Bでも10ミリ秒間動かすと、Window Bにフォーカスが移り、Window Aが後ろに置かれ、非常にイライラします。

私はさまざまな選択肢を模索してきました。

  • Window BTopMostプロパティをtrueに設定します。この問題は、ユーザーがウィンドウを閉じるか最小化して非表示にする必要があることです。上にウィンドウがたくさんある場合は、最初の問題と同じくらいイライラするようです。
  • MouseEnterイベントにFocus()の機能を与える代わりに、MouseClickまたはMouseHoverイベントをFocus()にします。 MouseClickの問題点は、ユーザーはいつもチャートを最初にクリックしてズームする必要がありますが、これは悪くはありませんが、迷惑になる可能性があります。 MouseHoverは大丈夫ですが、イベントがホバーとみなす時間は本当に短いです。

最後に、マウスをチャート上に置き、何もしなくてもスクロールできるようにしたい(マウスクリックなど)。これに加えて、誤って私のマウスをちょうど2秒間上に動かせば、チャートを含むフォームにフォーカスを戻すことは望ましくありません。

EDIT:

それは@TaWによると、チャートは残念ながら、これはWindows 7の場合ではないウィンドウ10内MouseWheelイベントをトリガするためにフォーカスを必要としないようです。

+0

_私は現在、私のウィンドウのフォームの1つでMSChartsを使用しています。 MSChartsに関する奇妙なことの1つは、グラフにフォーカスがない限り、Chart内でMouseWheelイベントをトリガーできないことです._ __これを確認できません.__ Win10を使用して、MouseWheelがフォーカスまたはコントロールのどのコントロールマウスがチャート上にある限り、そうです。 __Nor__は、Chartにフォーカスを設定し、Formitを起動します。他のWindowsのバージョンについてはわかりませんが、現在のW10 64ではすべてうまくいきます! – TaW

答えて

0

これは少しハック見えるかもしれませんが、それはこの場合には動作します:

これはFindFormメソッドを使用して動作します。私は今までそれが事であることを知らなかった。あなたはそれにあなたのマウスを動かすとhttps://msdn.microsoft.com/en-us/library/system.windows.forms.control.findform(v=vs.110).aspx

myChart.MouseEnter+= delegate(object sender, EventArgs args) //add a mouse enter event to your chart 
{ 
    if (!chart.Focused) //if chart isn't focused 
    { 
     if (chart.FindForm().ContainsFocus) //check if the form the chart is in contains focus 
      chart.Focus(); //if the chart isn't focused, but the form is focused, focus on the chart 
    } 
}; 

これはまだチャートフォーカスを与える、それはフォームあなた」からフォーカスをジャックにグラフを含むフォームを許可しません:あなたはここでそれについての詳細を読むことができます再入力。

関連する問題