C#窗体滚动条问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#窗体滚动条问题相关的知识,希望对你有一定的参考价值。

Bitmap bmap = new Bitmap(1300, 900);
Graphics gph = Graphics.FromImage(bmap);
我画了一个图 长1300高900

我的窗体必须长高必须是 580,580

但是要让窗体带滚动条怎么弄 高手指点下

可以加个PictureBox,然后把图片放到里面.再把窗体的AutoScroll 设成true
Bitmap bmap = new Bitmap(1300, 900);
Graphics gph = Graphics.FromImage(bmap);
gph.DrawLine(new Pen(Color.Blue), 0, 0, 100, 100);
PictureBox pb = new PictureBox();
pb.Image = bmap;
pb.Size = bmap.Size;
this.Controls.Add(pb);
this.AutoScroll = true;
参考技术A progressbar不是一个滚动条的控件吗,直接用算了.如果你要用LEFT WIDTH来算也可以,可以控制窗体大小啊
在load事件里
this.maxsize=new size(580,580);
this.minsize=new size(580,580);
这样就OK了
参考技术B 这个有点麻烦的

加个滚动条,在它的事件里掉用Invalid...方法(方法名忘了~:P)

然后重写OnPaint方法
在方法里根据滚动条的值,在窗体上画一部分图片(具体画哪部分要根据窗体大小和滚动条的值进行计算),造成滚动的效果

在《C#高级编程》上有例子,以前做的,记不清了~
参考技术C 给你个例子,图片名字和窗口尺寸自己换掉
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

public class Sizer : System.Windows.Forms.Form
private System.Windows.Forms.PictureBox picCritter;
private System.Windows.Forms.HScrollBar scrSize;

public static void Main()
Application.Run(new Sizer());

public Sizer()
InitializeComponent();

private void InitializeComponent()
this.picCritter = new System.Windows.Forms.PictureBox();
this.scrSize = new System.Windows.Forms.HScrollBar();
this.SuspendLayout();

this.picCritter.BackColor = System.Drawing.Color.White;
this.picCritter.Image = new Bitmap("winter.jpg");
this.picCritter.Location = new System.Drawing.Point(8, 8);
this.picCritter.Name = "picCritter";
this.picCritter.Size = new System.Drawing.Size(40, 40);
this.picCritter.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.picCritter.TabIndex = 0;
this.picCritter.TabStop = false;

this.scrSize.Location = new System.Drawing.Point(16, 248);
this.scrSize.Maximum = 200;
this.scrSize.Minimum = 50;
this.scrSize.Name = "scrSize";
this.scrSize.Size = new System.Drawing.Size(256, 16);
this.scrSize.TabIndex = 1;
this.scrSize.Value = 50;
this.scrSize.Scroll += new System.Windows.Forms.ScrollEventHandler(this.scrSize_Scroll);

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.AddRange(new System.Windows.Forms.Control[] this.scrSize,
this.picCritter);
this.Name = "Sizer";
this.Text = "Sizer";
this.ResumeLayout(false);



private void scrSize_Scroll(object sender, System.Windows.Forms.ScrollEventArgs e)
picCritter.Size = new Size(scrSize.Value, scrSize.Value);

C# winform DataGridView刷新慢

写了一个程序使用开发工具winform,在使用DataGridView控件,在我的机子上面运行一点问题都没得,不管数据有多少行,都不行影响性能,在同事的机子上运行(Amd Athlon 5400+,GF9500的独显) ,如果数据的行数太多,已经到了满幕后,就会出现一个滚动条,拖动滚动条时感觉数据刷新很慢,并且数据一直在从上往下闪屏,这时候如果再来操作这些数据,基本上是机子就痴呆了,程序运行起来慢得要死,打开任务管理器,CPU使用率直接50%以上,我本人的机子比同事的机子配置要差得多,都不会出现这种情况,但是不知道为什么样会出现这样子的一种情况。
问题描述完了,请高人指点。
全都是些瓜麻批。。

你们的硬件环境不同,操作系统环境可能也有所不同。比如他在运行你的程序的同时是否有很多后台程序在运行?如果操作系统中同时运行的线程过多,就会造成类似情况。

另外,你的CPU是否是Intel的,有时候某些AMD的CPU的计算能力有点问题。

一般编写的WinForm程序与显卡关系不大,他们都是采用CPU来计算界面,所以消耗CPU比较大,如果CPU的计算能力不同,就会造成刷屏的情况。WinForm与WPF不同,WPF是借用显卡的处理器,将界面重画工作都交给了显卡,解放了CPU的处理。
参考技术A 你可以删掉DataGridView重做一次试试:
1.删除掉现有的DataGridView
2.拖一个新的DataGridView,不改变任何属性,不手动创建列.
3.直接把数据绑定到DataGridView,看速度是否还是很慢.
若这样还很慢,就是你的电脑问题

如果上面的方法还不能解决,
那你就用分页的方式来显示吧...
参考技术B 分屏撒,你整这么多干什么 参考技术C 这个,我知道你是瓷锤!

以上是关于C#窗体滚动条问题的主要内容,如果未能解决你的问题,请参考以下文章

c# 将form窗体加载到tabcontrol后,滚动条失效

使用带有滚动条的任何控件时不会触发 MouseWheel 事件(在 C# Windows 窗体中)

c# datagridview 滚动条问题

C# 滚动条问题

C# Winform 滚动条的问题

C#如何让panel显示滚动条