C#WinForm基础编程(二)

简介: C#WinForm基础编程

C#WinForm基础编程(一)https://developer.aliyun.com/article/1433699


四、数组的删除

示例4:从数组中删除给出的数字

int[] arr = new int[] {8,6,9,5,73,11,56,87 };
Console.WriteLine("请输入你要删除的元素");
int num = int.Parse(Console.ReadLine());
int index = -1;
for(int i = 0; i < arr.Length; i++)
{
    if (num == arr[i])//查找要删除的元素
    {
        index = i;
        break;
    }
}
if (index != -1)
{
    for(int j = index; j < arr.Length-1; j++)//注意j是要小于arr.length-1;
    {
        arr[j] = arr[j + 1];//将从删除位置开始的数组元素依次前移
    }
    arr[arr.Length - 1] = 0;//将数组最后一个元素置成0
}else
{
    Console.WriteLine("没有你要删除的元素");
}
 ///
for(int i = 0; i < arr.Length; i++)
{
    Console.Write(arr[i]+"\t");
}

示例5:在顺序数组中插入一个数,要求插入后仍然保持数组的升序排列。

int[] arr = new int[] { 10, 20, 30, 40, 50, 60 ,0};
Console.WriteLine("请输入要插入的数字");
int num = int.Parse(Console.ReadLine());
int index = arr.Length-1 ;
for(int i = 0; i < arr.Length; i++)
{
    if (arr[i] > num)
    {
         index = i;
         break;
    }
}
for(int j = arr.Length - 2; j >= index; j--)
{
   arr[j + 1] = arr[j];
}
arr[index] = num;
for (int i = 0; i < arr.Length; i++)
{
    Console.Write(arr[i] + "\t");
}

视频课:https://edu.51cto.com/course/20906.html

第五章:类和对象

什么是对象

描述一个对象:

姓名:欧阳锋

性别:男

家住:深圳

。。。。属性;

弹吉他;

跳街舞;

。。。。能力

欧阳锋外传——封装

对象:是组成世界万物的具体个体
类:是有相同特点的个体的抽象概念
第一节:创建类和对象
创建类:
class Person
{
    public string name;
    public string sex;
    public int age;
    public void intro()
    {
        Console.WriteLine("我是:"+name+"性别:"+sex+",今年"+age+"岁了");
    }
}
创建对象:
Person p = new Person();
p.name = "令狐冲";
p.sex = "男";
p.age = 8;
Console.WriteLine(p.name);
p.intro();

在图形界面造人

string name = txtName.Text;
string sex = txtSex.Text;
int age = int.Parse(txtAge.Text);
Person per = new Person();
per.name = name;
per.sex = sex;
per.age = age;
per.intro();
构造方法:

构造方法是创建该类对象的方法,如果类中没有构造方法,系统会给一个默认(无参数)的构造方法

构造方法的结构是:public 类名(){}

一个类中一般需要有两个构造方法,一个是空参数(默认)的构造方法,一个是带参数的构造方法。

public Person(){  }
   public Person(string name, string sex, int age)
   {
       this.name = name;//this代表当前类的对象
       this.sex = sex;
       this.age = age;
   }
Person p = new Person("张无忌","男",12);
 Console.WriteLine(p.name);
 p.intro();

第二节:定义一般方法

方法的种类

方法分类:

一、无参数无返回值
public void intro()
 {
       Console.WriteLine("我是:"+name+"性别:"+sex+",今年"+age+"岁了");
 }
二、有参数无返回值
public void playGame(int level)
{
    if (level > 10)
    {
        Console.WriteLine("打败boss");
    }else
    {
        Console.WriteLine("game over");
    }  
}
三、无参数有返回值
public int getRandom()
{
     Random ran = new Random();
     return ran.Next(0,100);            
}

调用:

Student stu = new Student("王宗月","男",20);
 stu.intro();
 stu.playGame(50);
 int num=stu.getRandom();
 Console.WriteLine("随机数是:"+num);
 Console.Read();
四、有参数有返回值
public double plus(double num1,double num2)
{
    return num1 + num2;
}

方法调用:

Person per = new Person();
 double n1 = double.Parse(txtNum1.Text);
 double n2 = double.Parse(txtNum2.Text);
 double result=per.plus(n1,n2);
 MessageBox.Show(""+result,"计算结果是:");

五、类的完整代码:

class Person
{
    public string name;
    public string sex;
    public int age;
    public void intro()//无参数无返回值
    {
        Console.WriteLine("我是:"+name+"性别:"+sex+",今年"+age+"岁了");
    }
    public void playGame(int level)//无参数有返回值
    {
        if (level > 10)
        {
            Console.WriteLine("打败boss");
        }else
        {
            Console.WriteLine("game over");
        }  
    }
    public double plus(double num1,double num2)//有参数有返回值
    {
        return num1 + num2;
    }
    public string say()//无参数有返回值
    {
        return "欢迎你来到我家";
    }
    public Person(){ }//默认构造方法
    public Person(string name, string sex, int age)//带参数的构造方法
    {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
}

练习:1)编写狗类的代码并创建对象进行测试;2)编写手机类代码并测试;

class Dog
{
    public string name;
  public string sex;
  public int age;
  public string color;
    public Dog() { }
    public Dog(string name,string sex,int age,string color)
    {
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.color = color;
    }
    public void eat(string food)
    {
        Console.WriteLine("狗狗"+name+"在吃"+food);
    }
    public string seeDoor(string who)
    {
        if (who == "生人")
        {
            return "旺旺";
        }
        else
        {
            return "摇尾巴";
        }
    }
}

测试代码:

Dog dog = new Dog("花花","母",2,"白色");
dog.eat("肉骨头");
string res=dog.seeDoor("生人");
Console.WriteLine(res);

电话的类代码:

class Phone
{
  public string brand;
    public double price;
    public string type;
    public Phone() { }
    public Phone(string brand,double price,string type)
    {
        this.brand = brand;
        this.price = price;
        this.type = type;
    }
  public void listenMusic()
    {
        Console.WriteLine(brand+type+"手机在播放音乐");
    }
    public double comp(double num1,double num2,string opt)
    {
        if (opt == "+") return num1 + num2;
        if (opt == "-") return num1 - num2;
        if (opt == "*") return num1 * num2;
        if (opt == "/") return num1 / num2;
        return 0;
    }
    public void call(string phoneCode)
    {
        Console.WriteLine("给"+phoneCode+"号码打电话");
    }
    public string reportTime()
    {
        return DateTime.Now.ToString();
    }
}

手机测试代码:

Phone p = new Phone("华为",4560,"荣耀T-5");
p.listenMusic();
Console.WriteLine(p.reportTime());
p.call("13526985241");
Console.WriteLine(p.comp(6.5,5.9,"*"));

第三节:系统常用类ArrayList (集合)

ArrayList list = new ArrayList();
        list.Add(new Person("任我行", "男", 58));//向集合中添加元素
        list.Add(new Person("任盈盈", "女", 18));
        list.Add(new Person("令狐冲", "男", 18));
        list.Add(new Person("东方不败", "不男不女", 18));
        list.Add(new Person("岳不群", "不男不女", 48));
    Console.writeLine(list.Count);//打印集合中元素的数量
        list.RemoveAt(3);//删除索引位置为3 的元素
        list.Insert(2,new Person("鹿晗","女",23));//在指定索引位置插入元素
        foreach (Person per in list)
        {
            Console.WriteLine(per.name+":"+per.sex+":"+per.age);
        }
        list.Clear();//清空集合中所有的元素

第四节:ListBox和combobox控件的使用

两者都有集合items属性,是用来装内容的,其本质是ArrayList集合,添加ListBox组件将items添加名字等字符串,实现如下效果,点击按钮将ListBox中的所有项添加到comboBox中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eoxh0ier-1672665634021)(assets\1547022928672.png)]

1、单个添加的代码

欢迎按钮代码:

string name = txtName.Text;
MessageBox.Show("欢迎你:"+name,"提示");

将文本框内容单个添加到LIstBox中的按钮的代码:

string name = txtName.Text;
listNames.Items.Add(name);
txtName.Text = "";

将ListBox中内容单个添加到comboBox中的代码:

string name = (string)listNames.SelectedItem;
cobName.Items.Add(name);
cobName.SelectedIndex = 0;
listNames.Items.RemoveAt(listNames.SelectedIndex);
2、将ListBox中选中的所有项一起移动到comboBox中的代码
foreach(string item in list.Items)//将ListBox集合中所有的元素遍历
{
    cob.Items.Add(item);//将遍历的每一个集合元素添加到comboBox集合中
}
cob.SelectedIndex = 0;//让comboBox集合中默认选中第一个元素
list.Items.Clear();//清空ListBox集合中所有元素

改变ListBox中的selectionMode属性为multiSimple让ListBox中的选项可以多选。

foreach(string sel in list.SelectedItems)//遍历ListBox中选中元素的集合
{
    cob.Items.Add(sel);//将选中元素添加到comboBox中
}
cob.SelectedIndex = 0;
while (list.SelectedItems.Count > 0)
{
    list.Items.Remove(list.SelectedItems[0]);//从ListBox大集合Items中删除选中集合中的每一个元素,因为删除后集合会自动前移,所以只需要删除第一个元素即可。
}

第三节:类的静态属性和方法—static

Person per=new Person();

per.intro();

类的属性或方法一旦定义了静态:static,该变量就不能被实例对象访问,只能通过类名直接访问。

示例1:

class Student
    {
        public string name;
        public string sex;
        public int age;
        public static string className;
    public Student(string name,string sex,int age)
    {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }
    public void intro()
    {
        Console.WriteLine("我是:"+name+",性别"+sex+",今年"+age+"岁"+"在"+className);
    }
    public static void testc()
    {
        Console.WriteLine("nihao helloworld");
    }
}

调用的时候

Student stu3 = new Student("周钦荣", "男", 20);
        //stu3.className = "java2班";//这样调用是不行的
        Student.className="java3班";
        Student.testc();
类的ToString()方法:
override
public string ToString()
{
     return "我是:"+name + ":性别" + sex + ":年龄" + age;
}

控制台输出:窗体程序需要在项目中右键—【属性】—【输出类型】—【控制台应用程序】

string name = txtName.Text;
int age = int.Parse(txtAge.Text);
string sex = radMan.Checked ? "男" : "女";
Person per = new Person(name, sex, age);
Console.WriteLine(per);


C#WinForm基础编程(三)https://developer.aliyun.com/article/1433703

目录
相关文章
|
14天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
29 3
|
2月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
28天前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
|
1月前
|
安全 C# 数据安全/隐私保护
实现C#编程文件夹加锁保护
【10月更文挑战第16天】本文介绍了两种用 C# 实现文件夹保护的方法:一是通过设置文件系统权限,阻止普通用户访问;二是使用加密技术,对文件夹中的文件进行加密,防止未授权访问。提供了示例代码和使用方法,适用于不同安全需求的场景。
102 0
|
2月前
|
API C#
C# 一分钟浅谈:文件系统编程
在软件开发中,文件系统操作至关重要。本文将带你快速掌握C#中文件系统编程的基础知识,涵盖基本概念、常见问题及解决方法。文章详细介绍了`System.IO`命名空间下的关键类库,并通过示例代码展示了路径处理、异常处理、并发访问等技巧,还提供了异步API和流压缩等高级技巧,帮助你写出更健壮的代码。
42 2
|
2月前
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
74 11
|
2月前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue&lt;T&gt;`和`ConcurrentDictionary&lt;TKey, TValue&gt;`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
48 1
|
1月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
73 0
|
1月前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
84 0