panel的定位 自己做的一个控件,继承了panel,其中有一个button可以在控件中自由拖动,拖过范围则可以出现滚动条,但是当最大化时,滚动条总是被拖到最底下,知道是autoscrollposition的问题,高手能否帮我解决一下,如何最大化以后滚动条仍然保持在原位。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 尝试在form_Resize中重新计算你的 pancel大小,然后再去设定滚动条的位置 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace WindowsApplication18{ public partial class CustomControl1 : ScrollableControl { Point p; Point sp; Button b; public CustomControl1() { Button ti = new Button(); ti.BackColor = Color.Red; this.Controls.Add(ti); b = new Button(); b.Width = 200; b.MouseDown += new MouseEventHandler(b_MouseDown); b.MouseMove += new MouseEventHandler(b_MouseMove); this.Height = 400; this.Width = 400; this.Controls.Add(b); this.BackColor = Color.LemonChiffon; this.VScroll = true; this.HScroll = true; this.AutoScroll = true; this.AutoScrollPosition = new Point(10, 10); b.Location = new Point(this.AutoScrollPosition.X, this.AutoScrollPosition.Y); InitializeComponent(); } void CustomControl1_Scroll(object sender, ScrollEventArgs e) { } void b_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Point ep = PointToClient(MousePosition); Point cp = new Point(ep.X - p.X, ep.Y - p.Y); b.Location = new Point(sp.X + cp.X + this.AutoScrollPosition.X, sp.Y + cp.Y + this.AutoScrollPosition.Y); } } void b_MouseDown(object sender, MouseEventArgs e) { sp = new Point(b.Left, b.Top); p = PointToClient(MousePosition); if (e.Button == MouseButtons.Right) { MessageBox.Show(this.AutoScrollPosition.X.ToString() + "," + this.AutoScrollPosition.Y.ToString()); } } protected override void OnPaint(PaintEventArgs pe) { // TODO: 在此处添加自定义绘制代码 // 调用基类 OnPaint base.OnPaint(pe); } }}这是自定义控件的代码,大家帮忙看看了,多谢,注意最大化时滚动条的位置 你的定位penel的问题解决了吗?如果有,请告知是什么方法解决的,好吗?如果没有,你可否尝试一下以下的方法:因为在onresize时,会自动调用setcontrolinview(),把当前活动的控件设置到显示的工作区中,这样滚动条会自动的调整位置.所以,你需要在onresize方法中调用类似:protected override void OnResize(EventArgs e) { base.OnResize(e); foreach (Control c in this.Controls) { if (c.Focused) { this.Focus(); break; } } }的代码,来将焦点设置到控件本身.当然,你可以通过一个bool值来区分是拖动导致的onresize还是最大化最小化导致的. asp.net sql 2008信息写入数据库问题 请高手帮忙看看代码 利用程序自动 打开文件 帮忙改个正则。谢谢 问一个困扰了很久的方法命名问题 TextBox控件开启AutoComplete功能后KeyPress事件捕获不到加车键 达人帮助,c# 里 a.aspx页的OnClick触发b.aspx页的事件怎么做啊 调用主窗体后,如何才能将父窗体关闭,谢谢? 如何让Session["value"]在C#下永远不会过期????? 在一个事件处理程序里如何调用另一个事件处理程序呢? 在类中怎么使用委托 c#.net程序无法调试? +++为什么下面的类型不支持序列化?
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication18
{
public partial class CustomControl1 : ScrollableControl
{
Point p;
Point sp;
Button b;
public CustomControl1()
{
Button ti = new Button();
ti.BackColor = Color.Red;
this.Controls.Add(ti);
b = new Button();
b.Width = 200;
b.MouseDown += new MouseEventHandler(b_MouseDown);
b.MouseMove += new MouseEventHandler(b_MouseMove);
this.Height = 400;
this.Width = 400;
this.Controls.Add(b);
this.BackColor = Color.LemonChiffon;
this.VScroll = true;
this.HScroll = true;
this.AutoScroll = true;
this.AutoScrollPosition = new Point(10, 10);
b.Location = new Point(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
InitializeComponent();
} void CustomControl1_Scroll(object sender, ScrollEventArgs e)
{ } void b_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point ep = PointToClient(MousePosition);
Point cp = new Point(ep.X - p.X, ep.Y - p.Y);
b.Location = new Point(sp.X + cp.X + this.AutoScrollPosition.X, sp.Y + cp.Y + this.AutoScrollPosition.Y);
}
} void b_MouseDown(object sender, MouseEventArgs e)
{
sp = new Point(b.Left, b.Top);
p = PointToClient(MousePosition);
if (e.Button == MouseButtons.Right)
{
MessageBox.Show(this.AutoScrollPosition.X.ToString() + "," + this.AutoScrollPosition.Y.ToString());
} } protected override void OnPaint(PaintEventArgs pe)
{
// TODO: 在此处添加自定义绘制代码 // 调用基类 OnPaint
base.OnPaint(pe);
}
}
}这是自定义控件的代码,大家帮忙看看了,多谢,注意最大化时滚动条的位置
如果有,请告知是什么方法解决的,好吗?
如果没有,你可否尝试一下以下的方法:
因为在onresize时,会自动调用setcontrolinview(),
把当前活动的控件设置到显示的工作区中,
这样滚动条会自动的调整位置.所以,
你需要在onresize方法中调用类似:
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
foreach (Control c in this.Controls)
{
if (c.Focused)
{
this.Focus();
break;
}
}
}
的代码,来将焦点设置到控件本身.当然,你可以通过一个bool值来区分是拖动导致的onresize还是最大化最小化导致的.