C#使用者控制項的一些嘗試

來源:互聯網
上載者:User

標籤:blog   http   os   io   for   ar   2014   art   

    在設計完控制項後,想要建立一個Windows表單程式進行測試,但是一雙擊使用者控制項Visual 2013就停止運行,後面發現應該要先在Windows表單項目應用中添加控制項的引用,然後重建整個解決方案,問題就解決了。

    但接下來又產生了另一個問題,那就是控制項在設計調用的時候顯示不完全(我的控制項裡是組合了label和textbox兩個控制項的群組控制項),我發現是我理解的方法調用含義不對,labelTest.Top代表的不是label頂端的位置,而是控制項頂端與容器頂端的距離,所以當令labelTest.Top=0時,控制項的上端就會與容器的上端對齊,以此解決了顯示不全的問題。下面是整個控制項的代碼,實現了兩個屬性和設計時改變容器大小,內部複合控制項進行重繪:

   

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;

namespace WindowsFormsControlLibrary1
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}

private void UserControl1_Load(object sender, EventArgs e)
{
labelTest.Text = Name;// 設定靜態文本
textBoxTest.Left = labelTest.Right;// 靜態文本右端對齊文字框左端
textBoxTest.Width = Width - labelTest.Right - 3;// 文字框寬度
}

public enum PositionEnum
{
Right,
Below
}
private PositionEnum Position = PositionEnum.Right;
private int TextBoxMargin = 0;

public PositionEnum getPosition
{
get { return Position; }
set
{
Position = value;
MoveControls();
}
}

public int getTextboxMargin
{
get { return TextBoxMargin; }
set
{
TextBoxMargin = value;
MoveControls();
}
}

private void MoveControls()
{
switch (Position)
{
case PositionEnum.Below:
labelTest.Top = 0;
labelTest.Left = 0;
textBoxTest.Top = labelTest.Bottom;
textBoxTest.Height=Height-labelTest.Bottom;
textBoxTest.Left = 0;
textBoxTest.Width = Width - labelTest.Right - 3;
//Height = textBoxTest.Height + labelTest.Height;
break;
case PositionEnum.Right:
labelTest.Left = 0;

if (TextBoxMargin == 0)
{
textBoxTest.Left = labelTest.Right;// 靜態文本右端對齊文字框左端
textBoxTest.Width = Width - labelTest.Right - 3;// 文字框寬度
}
else
{
textBoxTest.Left = labelTest.Right+TextBoxMargin;// 靜態文本右端對齊文字框左端
textBoxTest.Width = Width - labelTest.Right - 3;// 文字框寬度
}
//textBoxTest.Height = Height;
break;
}
}

private void UserControl1_SizeChanged(object sender, EventArgs e)
{
MoveControls();
}

}
}

顯示的結果是:

 

展開後變成這樣:

最後還是沒有符合自己的預期,我想的是在設計時展開容器可以讓內部的控制項高和寬都進行等比例轉換,可是總不能成功,中間借鑒了網上一些人的想法,改變控制項的Anchor和Dock屬性,但效果不好(估計自己沒用對),只能讓控制項釘住隨地區移動,但大小還是沒變化,期待後續解決。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.