前提・実現したいこと
お世話になります。
色々模索しましたが、解決に至らなかったので質問させていただきます。
WindowsFormsにて、DataGridViewを2つ同一フォームに配置しており、片方のDataGridViewには、スクロールバーの表示を無効にしております。
また、スクロールバーに関しても「HorizontalScrollingOffset」を使用して同期をするようにしております。
実現したいこととしては、ダブルバッファーを適用させたいです。
ですが、「System.Reflection.PropertyInfo」を使用して設定を行うと、行う前よりはましですが、スクロールをした際に文字が引きずられております。
また、もう一つ「CreateParams」を使用して設定を行うとスクロールした際に文字が引きずられることなく表示はされますが、非常に重たいです。
恐らく、この設定を行うとDataGridViewのみでしたら問題無いですが、他のコントロールまでもダブルバッファーの対象になってしまい?重くなるのかなと考えております。
そもそも「CreateParams」を使用して設定を行うと、一部のコントロールが正常に表示されない可能性があるらしいので、できれば使用したくはないと思っております。
良い解決方法はないでしょうか?
ご教授の程よろしくお願いいたします。
該当のソースコード
// ダブルバッファーの設定⓵ System.Reflection.PropertyInfo dgvPropertyInfo= dgvtype.GetProperty( "DoubleBuffered", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); dgvPropertyInfo.SetValue(dgvHoge1, true, null); dgvPropertyInfo.SetValue(dgvHoge2, true, null);
// ダブルバッファーの設定⓶ protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; //拡張ウィンドウスタイルにWS_EX_COMPOSITEDを追加する cp.ExStyle |= 0x02000000; return cp; } }
// dgvHoge2の横スクロール private void dgvHoge2_Scroll(object sender, ScrollEventArgs e) { if (e.ScrollOrientation == ScrollOrientation.VerticalScroll) return; if (this.dgvHoge1.Rows.Count > 0 && this.dgvHoge2.Rows.Count > 0) { this.dgvHoge1.HorizontalScrollingOffset = e.NewValue; } }
補足情報
使用フレームワーク: .Net FrameWork 4.7.2
使用言語: C# 7.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/27 03:34