PDA

View Full Version : گذاشتن اسكرول عمودي براي treeView



m110_110
پنج شنبه 13 مرداد 1390, 15:52 عصر
سلام-يه اسكرول پيدا كردم كه بتونه عكس بگيره.
انداختم روي treeView و تونستم كه اسكرول treeView رو هم با جابجا كردن اين اسكرول جابجا كنم.ولي محتواي treeview تكون نميخوره.چكار كنم؟
خيلي ضروريه ...

Esmail Solhkhah
پنج شنبه 13 مرداد 1390, 23:00 عصر
سلام-يه اسكرول پيدا كردم كه بتونه عكس بگيره.
انداختم روي treeView و تونستم كه اسكرول treeView رو هم با جابجا كردن اين اسكرول جابجا كنم.ولي محتواي treeview تكون نميخوره.چكار كنم؟
خيلي ضروريه ...

دوست عزیز از این نمونه کد استفاده کنید.

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
[DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetScrollPos(int hWnd, int nBar);

[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);

private const int SB_HORZ = 0x0;
private const int SB_VERT = 0x1;

public Form1()
{
InitializeComponent();
}

private Point GetTreeViewScrollPos(TreeView treeView)
{
return new Point(
GetScrollPos((int)treeView.Handle, SB_HORZ),
GetScrollPos((int)treeView.Handle, SB_VERT));
}

private void SetTreeViewScrollPos(TreeView treeView, Point scrollPosition)
{
SetScrollPos((IntPtr)treeView.Handle, SB_HORZ, scrollPosition.X, true);
SetScrollPos((IntPtr)treeView.Handle, SB_VERT, scrollPosition.Y, true);
}

private void Form1_Load(object sender, EventArgs e)
{
Point ScrollPos = GetTreeViewScrollPos(treeView1);
SetTreeViewScrollPos(treeView1, ScrollPos);

}
}
}


موفق باشید.

m110_110
شنبه 15 مرداد 1390, 15:11 عصر
سلام مجدد و تشكر از جواب شما-
اين كد رو استفاده كردم ولي جواب كار من رو نداد. من از كد زير استفاده كردم و توانستم اسكرول رو جابجا كنم ولي محتواي treeView‌ تكون نميخوره.





private void customScrollbar1_Scroll_1(object sender, EventArgs e)

{


treeView1.AutoScrollOffset = newPoint(0, customScrollbar1.Value);



//Point ScrollPos = GetTreeViewScrollPos(treeView1);

SetTreeViewScrollPos(treeView1, treeView1.AutoScrollOffset);

Application.DoEvents();
Debug.WriteLine(" custom: " + customScrollbar1.Value.ToString());

TreeNode tn = treeView1.GetNodeAt(customScrollbar1.AutoScrollOff set);

if (tn.PrevVisibleNode != null)

tn.PrevVisibleNode.EnsureVisible();
}

customScrollbar1 كامپوننتي است كه عكس ميگيره-اين كد اسكرول treeView‌رو با اون توابعي كه دوست عزيزمون در بالا اشاره كرد جابجا ميكند ولي محتواي tree تغيير نميكند.لطفا راه حلي ارائه بديد كه بشه اين كار رو انجام داد. مهم است.