Winforms ListViewで自動スクロール(たとえば、上または下に近づくとListViewスクロール)を実装するにはどうすればよいですか?私は少し運が良いとGoogleで狩りました。私はこれが箱から機能しないと信じられない!事前 で おかげデイブC#ドラッグ&ドロップ中にListViewで自動スクロールを実装する
答えて
スクロールはListViewItem.EnsureVisibleメソッドで実行できます。 現在ドラッグしているアイテムがリストビューの目に見える境界にあり、最初/最後でないかどうかを判断する必要があります。
private static void RevealMoreItems(object sender, DragEventArgs e)
{
var listView = (ListView)sender;
var point = listView.PointToClient(new Point(e.X, e.Y));
var item = listView.GetItemAt(point.X, point.Y);
if (item == null)
return;
var index = item.Index;
var maxIndex = listView.Items.Count;
var scrollZoneHeight = listView.Font.Height;
if (index > 0 && point.Y < scrollZoneHeight)
{
listView.Items[index - 1].EnsureVisible();
}
else if (index < maxIndex && point.Y > listView.Height - scrollZoneHeight)
{
listView.Items[index + 1].EnsureVisible();
}
}
このメソッドをDragOverイベントに配線します。
targetListView.DragOver += RevealMoreItems;
targetListView.DragOver += (sender, e) =>
{
e.Effect = DragDropEffects.Move;
};
リンク(http://www.knowdotnet.com/articles/listviewdragdropscroll.html)のおかげで、私はC#が
class ListViewBase:ListView
{
private Timer tmrLVScroll;
private System.ComponentModel.IContainer components;
private int mintScrollDirection;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
const int WM_VSCROLL = 277; // Vertical scroll
const int SB_LINEUP = 0; // Scrolls one line up
const int SB_LINEDOWN = 1; // Scrolls one line down
public ListViewBase()
{
InitializeComponent();
}
protected void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.tmrLVScroll = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// tmrLVScroll
//
this.tmrLVScroll.Tick += new System.EventHandler(this.tmrLVScroll_Tick);
//
// ListViewBase
//
this.DragOver += new System.Windows.Forms.DragEventHandler(this.ListViewBase_DragOver);
this.ResumeLayout(false);
}
protected void ListViewBase_DragOver(object sender, DragEventArgs e)
{
Point position = PointToClient(new Point(e.X, e.Y));
if (position.Y <= (Font.Height/2))
{
// getting close to top, ensure previous item is visible
mintScrollDirection = SB_LINEUP;
tmrLVScroll.Enabled = true;
}else if (position.Y >= ClientSize.Height - Font.Height/2)
{
// getting close to bottom, ensure next item is visible
mintScrollDirection = SB_LINEDOWN;
tmrLVScroll.Enabled = true;
}else{
tmrLVScroll.Enabled = false;
}
}
private void tmrLVScroll_Tick(object sender, EventArgs e)
{
SendMessage(Handle, WM_VSCROLL, (IntPtr)mintScrollDirection, IntPtr.Zero);
}
}
私は同じコードを使用しましたが、なぜ私のために働かないのですか? – Ram
George Polevoyの回答はこれよりずっと簡単です –
それをised ObjectListViewを見てください。それはこのことをします。 ObjectListView自体を使用したくない場合は、コードを読み込んで使用できます。
将来のgooglerへのちょっとした注意:より複雑なコントロール(DataGridViewなど)でこれを機能させるには、this threadを参照してください。
- 1. listviewでドラッグ&ドロップを実装する方法は?
- 2. ジンジャーブレッドでドラッグ&ドロップを実装する
- 3. WPF/C#ListViewからキャンバスにドラッグ&ドロップ
- 4. jQueryのUI、ドラッグ可能、ドロップ可能、自動スクロール
- 5. 円滑に自動スクロールUITableView iOSアプリケーションでUITableViewCellをドラッグ中
- 6. ドラッグ&ドロップでC#winformの自動補完テキストボックス?
- 7. 複数のリストの反応でドラッグ&ドロップを実装する
- 8. アンドロイドでドラッグ&ドロップを実装する方法は?
- 9. アンドロイドのリスト間でドラッグ&ドロップを実装する方法は?
- 10. ドラッグ&ドロップC++でドロップ前にOutlookファイルを操作する
- 11. Ionicのドラッグ・ドロップ・ディレクティブを実装する方法は?
- 12. C#で自動実装されるプロパティ
- 13. ItemsControlをメトロでドラッグ&ドロップする(C#/ XAML)
- 14. ViewPagerのフラグメント内のドラッグ・アンド・ドロップListView
- 15. jqueryを使用してドラッグでスクロールを実装する方法
- 16. C#でSelenium WebDriverを使用してドラッグ&ドロップ機能を自動化[ファイルアップロード]
- 17. どのように実装して、別のリストビューにListViewのドロップ?
- 18. ドラッグ時の自動スクロール - Vaadin DragDropアドオン
- 19. 画像をドラッグ&ドロップするC#UWP
- 20. UILongPressGestureRecognizerを使用したUIImageViewのドラッグ&ドロップの実装
- 21. データベースからドラッグ&ドロップで自動的にデータを取得する方法
- 22. ドラッグ&ドロップ:ドロップは
- 23. HTML5キャンバスペインティングアプリケーションのドラッグ&ドロップの実装方法は?
- 24. ListViewが自動的にその先頭にスクロールする
- 25. C#で自動スクロールする方法
- 26. スイングでドラッグ&ドロップ
- 27. ドラッグ&ドロップでテキストボックス
- 28. ドラッグ&ドロップでテキストボックス
- 29. ドラッグ&ドロップでframeLayout
- 30. ピンをドラッグするときの自動スクロールmkmapview
null以外の項目を取得したら、常にitem.EnsureVisible()を呼び出すことができます。スクロールが必要な場合はそれを行い、それ以外の場合は何も行いません。 –
私はそれを取得しません。ここでのアイデアは、あなたがドラッグしているアイテムの横にある項目のInsureVisibleコールです。 –
item.EnsureVisible()は、その項目がnullでないことを確認してから使用できます。インデックス、maxIndex、scrollZoneHeightなどを取得しないようにすることができます。ユーザーは、上端または下端に少しドラッグする必要があります。ユーザーがスクロールして最初の項目または最後の項目にカーソルを移動させたい場合は、コードは完璧です。 –