如何设置禁止改变“C# WINFORM”窗体大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置禁止改变“C# WINFORM”窗体大小?相关的知识,希望对你有一定的参考价值。

设置方法:在Form类下面有一个FormBorderStyle的字段,我们可以通过设置它的值来让窗体不能被拉大拉小。FormBorderStyle的值设置为FormBorderStyle.FixedSingle或Fixed3D时,窗体大小是不能被改变的。当然,还有一种情况,我们也应该要考虑到,那就是窗体最大化。所以,我们要将窗体最大化的功能去掉,即this.MaximizeBox = false。

拓展:

1、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

2、C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。最近25年是使用最为广泛的编程语言。二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。

参考技术A

有两种方式,实现Client和Server的实时通讯(数据接收)。

1、 Pull  也就是拉。 即Client把数据从Server中拉出来。
因为winform本质是事件驱动,如果不想用button,那么最简单的方式就是用定时器(timer), 比如每10秒请求一次数据。

2、Push 推,即Server将信息推送到Client中去。
Winform中实现推送信息,一般需要和Server建立连接,连接后,当Server需要推送(比如数据有更新)时,才向Client中发送信息。

方式一的优缺点:

这种方式本质上和button没有区别,还是通过事件来驱动应用,只不过是“自动”的去读取数据。
优点是简单, 缺点是不及时(如果数据是1秒一变,这个10秒的间隔就太长了),而且资源利用率较低(如果1小时都没有变化, 这10秒一次的刷新就很占用资源)

方式二优缺点:

优点是数据的时效性较好,而且资源利用合理。缺点是需要大量的代码(相比定时器那种方法)。Push模式可以参考“观察者模式”的开发方式。

C# winform改变窗体大小时背景图片出现重叠怎么解决

小白请教

参考技术A 没刷新过来吧追问

改变一下窗体大小背景图片就拉成这样,不是没刷新过来。。。

参考技术B 改变窗体大小后有强制update()吗?追问

有。那个是一个MDI的父窗体,我是在这个父窗体的窗体大小改变事件里加的,但还是不行。


之后又在父窗体的窗体大小改变事件里加多了两行,重叠现象倒解决,但却出现另一个问题,拉动窗体改变大小闪烁的厉害。。

追答

那是因为你的update 加的地方不对.
图形滞留在哪个窗体 就强制哪个窗体update

闪烁是因为update被多次调用导致的.

你试试在对应的窗体 paint 事件下 写
this.update();

追问

好像没放错啊,就是图中的“图像查看器”那个窗体(form09)。。。
paint 事件下 写this.update();也不行。

追答

我的意思不是你放错了.
而且说update的放置处理方式不恰当.
比如你放在sizechanged中, 只要你鼠标拖动一下, 这个事件就会被触发. 那么你拖动过程中就会连续触发update. 为了避免这种情况.
你可以限制拖动改变窗体尺寸.
或者把update放在其他事件触发当中, 比如窗体的激活等
也或者把update作为用户主动调用方法, 放在刷新按钮等等方式里.

==============
只要你的update触发设计的不好, 被频繁触发, winform下无论你怎么设置buffer, 都会闪烁的. 从你改变尺寸的方式来看, 你的WM_PAINT消息结构的中RECT就是整块区域. 这就只能从设计技巧入手去改变这种情况.

否则你的窗体就只能使用DX来绘制. 这就什么都可以解决了, 但是就无法像Winform一样那样简单的使用控件.

参考技术C 什么情况下出现?追问

就是一个MDI界面的父窗体设置了背景图片,在拉动窗体边框改变大小时背景图片没随窗体的变化而变化,出现了图中的现象。背景图像布局为“Stretch”,但我觉得这个没关系,因为不把窗体设置MDI父窗体时就正常了。

追答

Form的构造函数里加这个有用吗:

this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

本回答被提问者采纳

以上是关于如何设置禁止改变“C# WINFORM”窗体大小?的主要内容,如果未能解决你的问题,请参考以下文章

C# winform改变窗体大小时背景图片出现重叠怎么解决

C# Winform 窗体设计 设计时 窗体大小不能调整

c# winform 如何让窗体能根据显示器大小自动调节大小呢?

C# WinForm的SplitContainer控件固定Panel大小

如何设置C#窗体大小不能改变

C# winform 禁止窗体移动