C# 如何在windows窗体c中滚动增加picturebox大小?
我有一个windows窗体中的PictureBox控件,其中有一个可移动的矩形图形,当PictureBox大小大于某个特定大小时,我的PictureBox大小将根据矩形的位置而增加滚动条C# 如何在windows窗体c中滚动增加picturebox大小?,c#,.net,winforms,picturebox,C#,.net,Winforms,Picturebox,我有一个windows窗体中的PictureBox控件,其中有一个可移动的矩形图形,当PictureBox大小大于某个特定大小时,我的PictureBox大小将根据矩形的位置而增加滚动条 public void PicBox_MouseDown(object sender, MouseEventArgs e) { if (rect.Contains(new Point(e.X, e.Y))) { mMove = true; }
public void PicBox_MouseDown(object sender, MouseEventArgs e)
{
if (rect.Contains(new Point(e.X, e.Y)))
{
mMove = true;
}
oldX = e.X;
oldY = e.Y;
}
public void Picbox_MouseUp(object sender , MouseEventArgs e)
{
mMove = false;
}
public void Picbox_MouseMove(object sender,MouseEventArgs e)
{
if (mMove)
{
picBox.Cursor = Cursors.Cross;
rect.X = rect.X + e.X - oldX;
rect.Y = rect.Y + e.Y - oldY;
}
oldX = e.X;
oldY = e.Y;
picBox.Invalidate();
}
public void Picbox_MousePaint(object sender, PaintEventArgs e)
{
picBox.Invalidate();
picBox.Size = new Size((rect.Width + rect.X) + 10, (rect.Height + rect.Y) + 10);
Draw(e.Graphics);
}
使用pictureBox首次显示表单时
拖动矩形后,pictureBox的大小将增大,并显示滚动条
这里一切正常,但我的问题是,无论pictureBox的大小有多大,向下拖动时滚动条工作正常,但当矩形向上拖动时,如果pictureBox的边缘与形状相交,则整个滚动条将重置为正常,通过看下面的图片,你将能够理解我想说的话
如何解决这个问题,有没有其他方法可以根据pictureBox的宽度增加滚动?这方面我是新手
矩形的作用就好像是相对于winform而不是pictureBox跟踪X和Y坐标一样
我可以制作pictureBox作为绘画的母版吗?恐怕这是不可能的 在
Winforms中,滚动条只会将溢出容器的内容重新显示出来。如果它们“下溢”,即如果它们的顶部
和/或左侧
值为负值,则不会显示滚动条
,即使它们显示了(由于额外的溢出),它们也不会将它们带回来
最小滚动位置为零
所以你必须确保不要让事情变得消极
您可以通过添加虚拟控件来强制执行滚动条
,但这只允许您将图片框
完全向上或向左滚动,而不是向后滚动
如果您真的想这样做,您可以检测情况并手动添加滚动条
控件,并对其进行编码,以将图片框
向下/向右移动
既然你问了,下面是一个例子。请注意,尽管使用有许多陷阱
- 其中一个问题是,当真正的
滚动条也出现时,如何处理这种情况?在这个例子中,我解决它的方法不是将滚动条添加到面板上,而是覆盖它;因此,当编码的滚动条显示时,真实的滚动条被隐藏李>
- 另一个问题是数字:内容应该移动多少像素?我不让用户在任何地方滚动,而是向上滚动,当这种情况发生时,我将PictureBox向后移动,编码的滚动条消失
- 作为最后一点警告,应该注意的是,一个编码的
滚动条允许您对您拥有的控件执行操作;但是它不允许你真正进入负面领域我想这就是你真正想要的。但我认为这是不可能的李>
因此,我建议您不要使用下面的代码,除非您可以简单地将PictureBox.Top
归零
// a variable at class level:
VScrollBar vScroll = null;
// move into negative for testing:
pictureBox1.Top = -15;
// now check to see if we need a VScrollBar
scrollCheck();
void scrollCheck()
{
if (pictureBox1.Top < 0)
{
if (vScroll == null )
{ vScroll = new VScrollBar(); vScroll.Parent = panel1.Parent;
vScroll.Scroll += vScroll_Scroll; vScroll.BringToFront();
}
vScroll.Location = new Point(panel1.Right - vScroll.Width - 2, panel1.Top + 1);
vScroll.Height = panel1.ClientSize.Height - 2;
vScroll.Value = vScroll.Maximum;
vScroll.Show();
}
else
{ vScroll.Hide(); }
}
void vScroll_Scroll(object sender, ScrollEventArgs e)
{
int delta = e.NewValue - e.OldValue;
if (delta < 0)
{
pictureBox1.Top = 0;
scrollCheck();
}
}
//类级别的变量:
VScrollBar vScroll=null;
//进入阴性状态进行测试:
图1.Top=-15;
//现在检查一下我们是否需要一个VScrollBar
滚动检查();
无效滚动检查()
{
如果(图1.Top<0)
{
如果(vScroll==null)
{vScroll=new VScrollBar();vScroll.Parent=panel1.Parent;
vScroll.Scroll+=vScroll_Scroll;vScroll.BringToFront();
}
vScroll.Location=新点(面板1.Right-vScroll.Width-2,面板1.Top+1);
vScroll.Height=panel1.ClientSize.Height-2;
vScroll.Value=vScroll.max;
vScroll.Show();
}
其他的
{vScroll.Hide();}
}
void vScroll_Scroll(对象发送器,ScrollEventArgs e)
{
int delta=e.NewValue-e.OldValue;
if(δ<0)
{
pictureBox1.Top=0;
滚动检查();
}
}
总而言之,我真的相信避免这种情况是最好的。不确定你想要什么,但是获得滚动PB的通常方法是将PictureBox放入面板中,面板的AutoCroll=true,PictureBox的AutoCroll=false。垂直拖动矩形时,PictureBox的高度会增加,我将矩形的位置和高度指定给PictureBox的大小,例如PictureBox。大小=矩形.Height+Rectangle.Y因此,当我向下拖动图片框并显示滚动条时,图片框的高度会增加,但当我向上拖动图片框时,正如您在上一张图像中所看到的,当图片框位于表单边缘上方时,滚动条会消失。这就是您所拥有的吗?如果是,问题是什么,或者这就是您想要的吗另外:什么是Picbox\u鼠标点
和绘图
?拖动代码在哪里?当picturebox位于窗体边缘上方时,是否为?在何处更改顶部或Y值??当图片框位于边缘上方时,更改为“是”。我已经更新了代码,Draw方法只是绘制矩形和节点。你可以给我一个链接,学习如何使用滚动条以及如何根据另一个控件操作滚动条(教程)?我已经编写了一个示例,但我怀疑使用它是否是一个好主意..左上区域的控件将永远不会显示,不管你做什么,除非你把它们移回去!