Winforms 在1小时内将DataGridViewRow移动1厘米
对于WinFormDataGridView,我要做的是在1小时内将行上下移动1厘米。我在谷歌上搜索了一下,但找不到任何能给我线索的东西。更具体地说,假设我在机器上打开了一个表单,其中DataGridView中填充了数据。如果我在1小时后查看DataGridView,它应该向上/向下移动1厘米。移动的方式应该是用户甚至不会意识到,并且在单击/选择单元格/行时不会出现任何问题 有人能告诉我从哪里开始,我如何实现这一点吗 注意:网格将保持原样。仅一行在1小时内上升/下降1厘米。 谢谢Winforms 在1小时内将DataGridViewRow移动1厘米,winforms,datagridview,scroll,Winforms,Datagridview,Scroll,对于WinFormDataGridView,我要做的是在1小时内将行上下移动1厘米。我在谷歌上搜索了一下,但找不到任何能给我线索的东西。更具体地说,假设我在机器上打开了一个表单,其中DataGridView中填充了数据。如果我在1小时后查看DataGridView,它应该向上/向下移动1厘米。移动的方式应该是用户甚至不会意识到,并且在单击/选择单元格/行时不会出现任何问题 有人能告诉我从哪里开始,我如何实现这一点吗 注意:网格将保持原样。仅一行在1小时内上升/下降1厘米。 谢谢 MChicago
MChicago此代码将使用计时器自动滚动DataGridView:要在一小时内移动1com,您必须通过实验找到正确的间隔值
public partial class Form1 : Form
{
private readonly Timer tmr = new Timer();
private int start;
public Form1()
{
InitializeComponent();
tmr.Interval = 100;
tmr.Tick += scrollGrid;
tmr.Enabled = true;
List<DisplayItem> list = new List<DisplayItem>
{
new DisplayItem("Apple"),
new DisplayItem("Orange"),
new DisplayItem("Banana"),
new DisplayItem("Grape")
};
// Make a long enough list to see the scrolling
dgv.DataSource = list.Concat(list).Concat(list).ToList();
}
private void scrollGrid(object sender, EventArgs e)
{
PropertyInfo verticalOffset = dgv.GetType()
.GetProperty("VerticalOffset", BindingFlags.NonPublic |
BindingFlags.Instance);
start += 1;
verticalOffset.SetValue(this.dgv, start, null);
}
private class DisplayItem
{
public DisplayItem(string s)
{
this.Value = s;
}
public string Value { get; set; }
}
}
公共部分类表单1:表单
{
专用只读计时器tmr=新计时器();
私人int启动;
公共表格1()
{
初始化组件();
tmr.间隔=100;
tmr.Tick+=滚动网格;
tmr.Enabled=true;
列表=新列表
{
新的DisplayItem(“苹果”),
新的DisplayItem(“橙色”),
新的DisplayItem(“香蕉”),
新的显示项(“葡萄”)
};
//制作足够长的列表以查看滚动
dgv.DataSource=list.Concat(list).Concat(list.ToList();
}
私有void scrollGrid(对象发送方、事件参数e)
{
PropertyInfo verticalOffset=dgv.GetType()
.GetProperty(“垂直偏移量”,BindingFlags.NonPublic)
BindingFlags.Instance);
开始+=1;
verticalOffset.SetValue(this.dgv,start,null);
}
私有类显示项
{
公共显示项(字符串s)
{
该值=s;
}
公共字符串值{get;set;}
}
}
感谢Stuart提供的示例。我尝试了代码,过了一段时间后移动了整行。我需要有一个平滑的滚动。因此,一旦定时器被触发,它应该移动行,例如,让我们只移动行的1/20。