博客换主题啦!!!

feed订阅 腾讯微博 你好,欢迎光临! 

Category Archives: WinForm

无聊所创

2008.06.1 , , No Comments , 322 浏览

无聊时所创,也忘了写注释,看起来可能有点费劲。代码保留下来,或许做个C#的俄罗斯方块或者五子棋之类的东西会有用。 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace tetris
{
    
public partial class frmConfig Form
    
{
        
public frmConfig()
        {
            
InitializeComponent();
        }

        private bool[,] arr new bool[55];
        
private Color blockColor Color.Red;

        private void lblModle_Paint(object senderPaintEventArgs e)
        {
            
Graphics gp e.Graphics;
            
gp.Clear(Color.Black);
            
Pen p new Pen(Color.White);

            for (int 30156+= 31)
            {
                
gp.DrawLine(p1i155i);
            }
            
for (int 30156+= 31)
            {
                
gp.DrawLine(pi1i155);
            }
            
SolidBrush s new SolidBrush(blockColor);
            
for (int 05x++)
            {
                
for (int 05y++)
                {
                    
if (arr[xy])
                    {
                        
gp.FillRectangle(s,31*x,31*y,30,30);
              
      }
                }
            }
        }

        private void lblModle_MouseClick(object senderMouseEventArgs e)
        {
            
if (e.Button != MouseButtons.Left)
                
return;
            
int xPointyPoint;
            
xPoint e.31;
            
yPoint e.31;
            
arr[xPointyPoint] = !arr[xPointyPoint];
            
bool arr[xPointyPoint];
            
Graphics gp lblModle.CreateGraphics();
            
SolidBrush s new SolidBrush(b?blockColor:Color.Black);
            
gp.FillRectangle(s,31*xPoint,31*yPoint,30,30);
            
gp.Dispose();
        }

        private void lblColor_Click(object senderEventArgs e)
        {
            
colorDialog1.ShowDialog();
            
blockColor colorDialog1.Color;
            
lblColor.BackColor colorDialog1.Color;
            
lblModle.Invalidate();
        }

        private void btnAdd_Click(object senderEventArgs e)
        {
            
bool isEmpty false;
            
foreach (bool in arr)
            {
                
if (i)
                {
                    
isEmpty true;
                    
break;
                }
            }
            
if (!isEmpty)
            {
                
MessageBox.Show("图案为空,请您绘制图案!","提示");
                
return;
            }

            StringBuilder sb new StringBuilder(25);
            
foreach (bool in arr)
            {
                
sb.Append("1" "0");
            }
 &nb
sp;          
string blockString sb.ToString();
            
foreach (ListViewItem item in lstBlockSet.Items)
            {
                
if (item.SubItems[0].Text == blockString)
                {
                    
MessageBox.Show("该图已经存在!""提示");
                    
return;
                }
            }
            
ListViewItem myItem new ListViewItem();
            
myItem lstBlockSet.Items.Add(blockString);
            
myItem.SubItems.Add(Convert.ToString(blockColor.ToArgb()));
        }

        private void lstBlockSet_ItemSelectionChanged(object senderListViewItemSelectionChangedEventArgs e)
        {
            
if (e.IsSelected)
            {
                
blockColor Color.FromArgb(int.Parse(e.Item.SubItems[1].Text));
                
lblColor.BackColor  style="font: 10pt Fixedsys; color: #0a246a">= blockColor;
                
string e.Item.SubItems[0].Text;
                
for (int 0s.Lengthi++)
                {
                    
arr[55] = (s[i] == '1') ? true false;
                }

            } lblModle.Invalidate();
        }
    }
}

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。

2008.05.26 , , No Comments , 543 浏览

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言) 要求: 1.要有联动性,老鼠和主人的行为是被动的。 2.考虑可扩展性,猫的叫声可能引起其他联动效应。程序实现: using System;
using System.Collections.Generic;
using System.Text;

namespace CatMouse
{
    
class Cat
    
{
        
public delegate void Done();
        
public event Done Miao;

        public void Shout()
        {
            
Console.WriteLine("猫叫了~");
            
Miao();
        }
    }

    class Mouse
    
{
        
public void Run()
        {
            
Console.WriteLine("老鼠跑了~");
        }
    }

    class Person
    
{
        
public void WakeUp()
        {
            
Console.WriteLine("主人醒了~");
        }
    }

    class Gate
    
{
        
static void Main(string[] args)
        {
            
Cat Tom new Cat();
            
Mouse Jerry new Mouse();
            
Person Kivon new Person();

            Tom.Miao +=new Cat.Done( >Jerry.Run);
            
Tom.Miao+=new Cat.Done(Kivon.WakeUp);
            
Tom.Shout();
        }
    }
}

CSHARP属性简介

2008.05.23 , , No Comments , 572 浏览

C#通过属性特征性读取和写入字段,而不直接读取和写入,以此来提供对类中字段的保护。C#属性在实现这种保护的同时,允许用户像访问字段一样访问属性。因此,属性可用于类的内部封装数据。假设有Employee类,属性的名称可以是职员、部门名称、人数等。下面是代码片段,它声明类变量_name和_id,并将用户输入的值赋给它们。代码1:

class Employee
{
    
private static string _name;
    
private static string _id;

    static void Main(string[] args)
    {
        
_name Console.ReadLine();
        
_id Console.ReadLine();
    }
}
虽然上面的代码1可以正确工作,但公开类的数据成员通常认为是一个不好的编程做法。因为用户为字段_id输入的值再赋值之前没有经过必要的验证,所以用户可以输入任何值而不受限制。要实现验证,需要顶一个方法,比如SetId(),在该方法中,作为参数传递的值先要通过验证,然后才传递给类中的字段。如果需要些该验证代码,则可以通过修改SetId()方法来实现。任何人调用SetId()方法来设置_Id,都会收到这个修改的影响,而不需要对调用SetId()的代码进行修改。因为SetId()方法只存在于一个地方,而调用SetId()方法的地方会有多处,这样修改一处代码,而避免了对多处代码的修改。这就是封装对程序的作用,进行小的修改,而避免大的修改,因此使得程序可靠且易于维护。同样,要检索_Id的值,则需要实现方法GetId()。下面的代码2显示实现讲解的方法之后代码1中修改的代码。

class Employee
{
    
private static string _name;
    
private static string _id;

    public void SetId(value)
    {
        
//验证长度是否小于2
        
if(_id.Lenght 2)
        {
            
_id value;
        }
    }

    public string GetId()
    {
        
return _id;
    }
}

设置_id字段的值时,必须调用SetId()方法。同样,检索其值时,必须调用GetId()。如代码3所示:

Employee emp;
    
emp.SetId("A1");
    
string Department emp.GetId();
很明显,每次需要访问字段时都调用GetId()和SetId()方法。这需要调用者熟悉这个类的方法,知道GetId()和SetId()是用来检索和设置Id字段的值的,如果不熟悉,则无法调用。为了解决这个问题,C#推出了属性的概念。代码4先是修改过的代码2,实现了Id字段的属性。

class Employee
{
    
private&nbs
p;static string 
_name;
    
private static string _id;

    public string Id
    
{
        
get
        
{
            
return _id;
        }

        set
        
{
            
if (_id.Length 2)
            {
                
_id value;
            }
        }
    }
}

代码4显示了一段干净的代码,没有定义任何其他标识符,如GetId()和SetId()。在这种情况下,需要get()访问器返回一个string值。set()访问器返回一void并使用内置参数value,因此不需要对实际参数名进行编码。所需完成的唯一任务是定义get()和set()访问器,并任然将数据成员当作字段使用。运行时将负责识别和调用相应的get()和set()访问器。属性的这种设计实现了像访问字段一样访问数据成员,同时还实现了数据的封装和保证了数据的安全。

使用VS2005创建用户控件

2008.05.8 , , No Comments , 703 浏览

首先使用VS2005创建一个windows应用程序。

 

在解决方案资源管理器中单击右键选择添加->用户控件->输入控件名称(例如:OurListView)->单击添加按钮。

这时我们可以看到一个空白的界面。我们可以在上面“画”上我们想要的特定样子的控件。这里neeke就画成这样:

neeke画成这样的目的是要实现当点击“>>”按钮时,可以将左边选中的水果显示在右边,另一个按钮与此相反。

接下来在解决方案资源管理器中单击右键选择生成。然后我们回到Form1.cs,点击最左边的工具箱,可以看到如下:

多出了一个我们刚才自己设计的控件,我们用拖动它到Form1上

接下来我们编写代码,回到OurListView设计界面双击“>>”按钮,写入如下代码:

for (int this.listBox1.SelectedItems.Count 1>= 0i--)
            {
                
object item listBox1.Items[i];
                
this.listBox2.Items.Add(item);
                
this.listBox1.Items.Remove(item);
            }

双击另一个按钮写入:

for (int this.listBox2.SelectedItems.Count 1>= 0i--)
            {
                
object item listBox1.Items[i];
                
this.listBox1.Items.Add(item);
                
this.listBox2.Items tyle="font: 10pt Fixedsys; color: #0a246a">.Remove(item);
            }

保存->生成解决方案->运行,结果如图:

WinForms的Label标签

2008.03.6 , , No Comments , 458 浏览

Windows窗体的标签控件用于显示用户不能编辑的文本或图像,该控件是用于对窗体上各种控件进行标注或说明。

Windows窗体简介

2008.03.6 , , No Comments , 532 浏览

我们经常会通过显示属性窗口来设置计算机屏幕显示效果,如屏幕分辨率、背景颜色以及外观。
实际上,我们每天都会接触到不同的Windows窗口,这些窗口都具有类似的特点,如可以放大、缩小和关闭等,而且,我们还会发现,窗口上的元素通常也是经常重复出现的,如文本输入框、按钮、下拉列表、文件列表等。

Hello World——最简单的C#程序

2008.02.27 , , No Comments , 511 浏览

代码如下:
using System;
namespace Notepad
{
  
class HelloWorld
  
{
    
public static void Main()
    {
      
Console.WriteLine("Hello World");
    }
  }
}
命令提示符下编译:
CSC 
<源文件名

ADO.NET的优点

2008.02.22 , , No Comments , 858 浏览

ADO.NET具有很多有点,时的数据操作过程变得容易,这些优点包括:

ADO.NET简介

2008.02.22 , , No Comments , 415 浏览

前面学习了如何从文件中读写数据,可以将数据存储在文件中,这对于少量数据操作比较简便,但是,若遇到有大量数据的话,这种做法就不适应。而且将数据存储在文件中还可能导致其它问题,例如不一致,读取过程繁琐和文件被损坏。
比如一个航空公司的订票系统,若要前台工作人员及住所有乘客的详细信息,如旅行日期及其航班等是不现实的,但是若用关系数据库(RDBMS)来存储这些数据的话,获取这些信息就只不过十几秒钟的事。
MS Access,SQL Server和Oracle是一些常见的RDBMS。用户需要数据时,应能访问存储在数据库中的数据。在航空公司订票系统的例子中,用户计算机相数据库服务器发送请求,能够检索乘客的详细预订信息,为了使客户端能够访问服务器上的数据,需要用到数据访问方法或技术,而ADO.NET就是这种技术之一。
.NET Framework中的ADO.NET是一组允许基于.NET的应用程序访问数据库以及其它数据存储,以便读取和更新信息的类。与使用这些类需要引用System.Data命名空间。它以ActiveX数据对象为基础,但与依赖于连接的ADO不同,ADO.NET是专门为了对数据存储进行无连接数据访问而设计的。ADO.NET以XML作为传送和接收数据的格式,因此与ADO相比,它提供了更大的兼容性和灵活性。