控制項定位與自動縮放 建國科技大學 資管系 饒瑞佶.

Slides:



Advertisements
Similar presentations
单元二:面向对象程序设计 任务二:借书卡程序设计.
Advertisements

第一單元 建立java 程式.
项目7 面向对象高级.
项目6 通用堆栈.
人 工 智 慧 報 告 五子棋AI設計 報告者 : 潘輝銘.
四資二甲 第三週作業 物件導向程式設計.
项目:贪吃蛇游戏设计 工作任务一:系统设计(system design) 工作任务二:豆类(Bean)设计
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
第13章多项目设计与开发.
C#程序设计 10软件1、2班 王槐彬 计算机工程学院.
Visual Basic.NET 程序设计语言课程内容
AOP实践 演讲人:陈思荣.
LINQ 建國科技大學 資管系 饒瑞佶.
第16章 Windows Form與資料繫結 16-1 資料繫結的基礎 16-2 在專案新增資料來源 16-3 使用資料來源建立單筆編輯表單
第二章 C# 基础知识.
第四章 在 C# 中实现 OOP 概念.
JAVA vs. SQL Server 建國科技大學 資管系 饒瑞佶 2013/4 V1.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
本單元介紹何謂變數,及說明變數的宣告方式。
Controls.
第六章 继承性和派生类 胡昊 南京大学计算机系软件所.
程式設計實作.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
程序设计期末复习 黎金宁
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第9章 多线程 王德俊 上海交通大学继续教育学院.
ASP.NET基本設計與操作 建國科技大學 資管系 饒瑞佶 2007年.
委派與執行緒 建國科技大學 資管系 饒瑞佶.
form1 卡拉OK pictureBox1 fish1.bmp pictureBox2 fish2.bmp label1 卡拉OK字幕機
并发机制 结果应该为: 线程 1: 1 线程 1: 2 线程 1: 3 线程 1: 4 线程 1: 5 线程 2: 6 线程 2: 7
視窗程式設計 (Windows Programming)
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
Ch02-基礎語法.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
$10 可空类型.
第六章 属性、索引器、委托和事件.
P2P聊天工具.
第一單元 建立java 程式.
標籤、按鈕、工具列、狀態列 (Labels, Buttons, Tool Strips, and Status Strips)
FileUpload控制項 建國科技大學 資管系 饒瑞佶 2007年.
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
第三章 C# 基础知识.
辅导课程八.
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
網頁程式概論 建國科技大學資管系 饒瑞佶 2015/9 V1 2016/4 V2 2016/9 V3.
补充:c#语言基础.
C#程序设计基础 $3 成员、变量和常量.
讓Emulator可以 使用Android Market
IIS Internet Information Services
雙按button1,2,3,4 Method 方法/動作 textBox2.Text textBox1 textBox3.Text 轉為數字 c是數字 int c = int.Parse(textBox1.Text) + …; textBox3.Text = c.ToString();
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第三章 数据抽象.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
订单汇总单功能详解 -芜花.
陣列與結構.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
MDI介面建置 建國科技大學 資管系 饒瑞佶.
專案建置與封裝程式 建國科技大學 資管系 饒瑞佶.
C# 匿名委派 + Lambda + Func 建國科技大學 資管系 饒瑞佶.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
MenuStrip by Szeto CY Visual C# 2008.
多國語系 建國科技大學 資管系 饒瑞佶.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

控制項定位與自動縮放 建國科技大學 資管系 饒瑞佶

Windows Form控制項排版問題 控制視窗最大化 邊界控制視窗任意大小 如果調整視窗大小 控制項沒跟著變化

如何解決? 透過控制項的Anchor屬性

Anchor屬性 這樣表示控制項的左邊與上方距離視窗的距離要維持固定 如果改成下面這個設定呢?

多個物件時 如果只設定Anchor,物件並不會依據視窗大小自動等比例縮放 但物件間的相對位置沒有改變 先設定視窗的Minimum size屬性,以免視窗太小,物件擠成一堆

可以維持相對關係同時端點自動縮放 Left Top right Top right Top right Left Top Top left

Dock 簡易分成五種停駐方式 Anchor與Dock只能擇一使用

調整Dock物件順序 檢視其他視窗文件大綱 直接拖拉調整 針對Dock在同一區的物件調整順序

靠程式解決控制項自動縮放問題 建立clsResize 類別 public class clsResize { List<System.Drawing.Rectangle> _arr_control_storage = new List<System.Drawing.Rectangle>(); private bool showRowHeader = false; public clsResize(Form _form_) form = _form_; // 要進行縮放的form _formSize = _form_.ClientSize; // form的原始大小 _fontsize = _form_.Font.Size; // 原始字體大小 }

private float _fontsize { get; set; } private System.Drawing.SizeF _formSize {get;set; } private Form form { get; set; } public void _get_initial_size() //取得原始物件大小// { var _controls = _get_all_controls(form); foreach (Control control in _controls) // 輪詢所有物件 _arr_control_storage.Add(control.Bounds); // 儲存物件大小 // 如果有使用datagridview if (control.GetType() == typeof(DataGridView)) _dgv_Column_Adjust(((DataGridView)control), showRowHeader); }

public void _resize() //Set the resize { double _form_ratio_width = (double)form.ClientSize.Width /(double)_formSize.Width; double _form_ratio_height = (double)form.ClientSize.Height / (double)_formSize.Height; var _controls = _get_all_controls(form); int _pos = -1; foreach (Control control in _controls) // 進行縮放比例計算 _pos += 1;//increment by 1; System.Drawing.Size _controlSize = new System.Drawing.Size((int)(_arr_control_storage[_pos].Width * _form_ratio_width), (int)(_arr_control_storage[_pos].Height * _form_ratio_height)); //大小比例 System.Drawing.Point _controlposition = new System.Drawing.Point((int) (_arr_control_storage[_pos].X * _form_ratio_width),(int) (_arr_control_storage[_pos].Y * _form_ratio_height));//位置計算 // 設定邊界 control.Bounds = new System.Drawing.Rectangle(_controlposition, _controlSize); // datagridview專用 if (control.GetType() == typeof(DataGridView)) _dgv_Column_Adjust(((DataGridView)control), showRowHeader); //字體大小 control.Font = new System.Drawing.Font(form.Font.FontFamily, (float)(((Convert.ToDouble(_fontsize) * _form_ratio_width) / 2) + ((Convert.ToDouble(_fontsize) * _form_ratio_height) / 2))); }

private void _dgv_Column_Adjust(DataGridView dgv, bool _showRowHeader) // Datagridview 用 { int intRowHeader = 0; const int Hscrollbarwidth = 5; if (_showRowHeader) intRowHeader = dgv.RowHeadersWidth; else dgv.RowHeadersVisible = false; for (int i = 0; i < dgv.ColumnCount; i++) if (dgv.Dock == DockStyle.Fill) //in case the datagridview is docked dgv.Columns[i].Width = ((dgv.Width - intRowHeader) / dgv.ColumnCount); dgv.Columns[i].Width = ((dgv.Width - intRowHeader - Hscrollbarwidth) / dgv.ColumnCount); }

private static IEnumerable<Control> _get_all_controls(Control c) { return c.Controls.Cast<Control>().SelectMany(item => _get_all_controls(item)).Concat(c.Controls.Cast<Control>()).Where(control => control.Name != string.Empty); }

表單中使用clsResize類別 clsResize _form_resize; public Form1() { InitializeComponent(); _form_resize = new clsResize(this); this.Load += _Load; this.Resize += _Resize; } private void _Resize(object sender, EventArgs e) _form_resize._resize(); private void _Load(object sender, EventArgs e) _form_resize._get_initial_size();

如果是動態產生物件 也可以自動縮放,但是每個物件一定需要設定name屬性 public Form3() { InitializeComponent(); _form_resize = new clsResize(this); //this.Load += _Load; this.Resize += _Resize; } 新動態物件加入後再呼叫 _form_resize._get_initial_size();