用事件来搞定窗体间的数据传递c#

  // form1.cs
  //—————————————-
  using System;
  using System.Drawing;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  using System.Data;
  
  namespace FormConmunicate
  {
   ///

   /// Form1 的摘要说明。
   ///

  
   public delegate string getText();
  
   public class Form1 : System.Windows.Forms.Form
   {
   public System.Windows.Forms.TextBox textBox1;
   private System.Windows.Forms.Button button1;
   ///

   /// 必需的设计器变量。
   ///

   private System.ComponentModel.Container components = null;
  
   public Form1()
   {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();
  
   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
   }
  
   ///

   /// 清理所有正在使用的资源。
   ///

   protected override void Dispose( bool disposing )
   {
   if( disposing )
   {
   if (components != null)
   {
   components.Dispose();
   }
   }
   base.Dispose( disposing );
   }
  
   #region Windows Form Designer generated code
   ///

   /// 设计器支持所需的方法 – 不要使用代码编辑器修改
   /// 此方法的内容。
   ///

   private void InitializeComponent()
   {
   this.textBox1 = new System.Windows.Forms.TextBox();
   this.button1 = new System.Windows.Forms.Button();
   this.SuspendLayout();
   //
   // textBox1
   //
   this.textBox1.Location = new System.Drawing.Point(64, 40);
   this.textBox1.Name = “textBox1”;
   this.textBox1.Size = new System.Drawing.Size(88, 21);
   this.textBox1.TabIndex = 0;
   this.textBox1.Text = “textBox1”;
   //
   // button1
   //
   this.button1.Location = new System.Drawing.Point(104, 168);
   this.button1.Name = “button1”;
   this.button1.Size = new System.Drawing.Size(96, 24);
   this.button1.TabIndex = 1;
   this.button1.Text = “button1”;
   //this.button1.Click += new System.EventHandler(this.button1_Click);
   //
   // Form1
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(292, 273);
   this.Controls.AddRange(new System.Windows.Forms.Control[] {
   this.button1,
   this.textBox1});
  
  
   FormHandel.myFormHandel[0]=(int)this.Handle;
  
  
  
  
   this.Name = “Form1”;
   this.Text = “Form1”;
   this.ResumeLayout(false);
  
   }
   #endregion
  
   ///

   /// 应用程序的主入口点。
   ///

   [STAThread]
   static void Main()
   {
   Form1 f1=new Form1();
   Form2 f2=new Form2();
  
   f2.TextChange+=new TextChangeEventHander(f1.ontextchange);
  
   f2.Show();
  
   Application.Run(f1);
   }
  
   private void ontextchange(object sender,Form2EventArg e)
   {
   this.textBox1.Text=e.MyText ;
  
   }
   }
  
   public class FormHandel
   {
   public static int[] myFormHandel={1,2};
  
   }
  
  }
  
  //———————————————–
  // form2.cs
  //———————————————–
  using System;
  using System.Drawing;
  using System.Collections;
  using System.ComponentModel;
  using System.Windows.Forms;
  
  namespace FormConmunicate
  {
   ///

   /// Form2 的摘要说明。
   ///

   ///
  
   public delegate void TextChangeEventHander(object sender,Form2EventArg e);
  
   public class Form2 : System.Windows.Forms.Form
   {
   public System.Windows.Forms.TextBox textBox1;
   private System.Windows.Forms.Button button1;
  
   public event TextChangeEventHander TextChange;
  
   ///

   /// 必需的设计器变量。
   ///

   private System.ComponentModel.Container components = null;
  
  
   public Form2()
   {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();
  
   this.textBox1.Text=this.Handle.ToString();
  
   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
   }
  
   ///

   /// 清理所有正在使用的资源。
   ///

   protected override void Dispose( bool disposing )
   {
   if( disposing )
   {
   if(components != null)
   {
   components.Dispose();
   }
   }
   base.Dispose( disposing );
   }
  
   #region Windows Form Designer generated code
   ///

   /// 设计器支持所需的方法 – 不要使用代码编辑器修改
   /// 此方法的内容。
   ///

   private void InitializeComponent()
   {
   this.textBox1 = new System.Windows.Forms.TextBox();
   this.button1 = new System.Windows.Forms.Button();
   this.SuspendLayout();
   //
   // textBox1
   //
   this.textBox1.Location = new System.Drawing.Point(168, 56);
   this.textBox1.Name =

“textBox1”;
   this.textBox1.Size = new System.Drawing.Size(80, 21);
   this.textBox1.TabIndex = 0;
   this.textBox1.Text = “textBox1”;
   //
   // button1
   //
   this.button1.Location = new System.Drawing.Point(168, 136);
   this.button1.Name = “button1”;
   this.button1.Size = new System.Drawing.Size(88, 24);
   this.button1.TabIndex = 1;
   this.button1.Text = “button1”;
   this.button1.Click += new System.EventHandler(this.button1_Click);
   //
   // Form2
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(292, 273);
   this.Controls.AddRange(new System.Windows.Forms.Control[] {
   this.button1,
   this.textBox1});
  
   FormHandel.myFormHandel[1]=(int)this.Handle;
   this.Name = “Form2”;
   this.Text = “Form2”;
   this.ResumeLayout(false);
  
   }
   #endregion
  
   private void button1_Click(object sender, System.EventArgs e)
   {
  
   //引发事件,并传递数据
   TextChange(this,new Form2EventArg(this.textBox1.Text));
   }
   }
  
   //事件数据
   public class Form2EventArg:System.EventArgs
   {
   private readonly string mytext ;
  
   public Form2EventArg(string str)
   {
   mytext=str;
   }
  
   public string MyText
   {
   get
   {
   return mytext;
   }
  
   }
   }
  
  }
  
  

c#的四种排序算法

冒泡排序
  
  

using System;
  
  namespace BubbleSorter
  
  { public class BubbleSorter
  
  { public void Sort(int [] list)
  
  { int i,j,temp;
  
  bool done=false;
  
  j=1;
  
  while((j<list.Length)&&(!done))
  
  { done=true;
  
  for(i=0;i<list.Length-j;i++)
  
  {
  
  if(list[i]>list[i+1])
  
  {
  
  done=false;
  
  temp=list[i];
  
  list[i]=list[i+1];
  
  list[i+1]=temp;
  
  } }
  
  j++; }
  
  } }
  
  public class MainClass
  
  { public static void Main()
  
  {
  
  int[] iArrary=new int[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
  
  BubbleSorter sh=new BubbleSorter();
  
  sh.Sort(iArrary);
  
  for(int m=0;m<iArrary.Length;m++)
  
  Console.Write("{0} ",iArrary[m]);
  
  Console.WriteLine();
  
  } }
  
  }
  

  
  
  
  选择排序
  
  

using System;
  
  
  namespace SelectionSorter
  
  { public class SelectionSorter
  
  { private int min;
  
  public void Sort(int [] list)
  
  { for(int i=0;i<list.Length-1;i++)
  
  { min=i;
  
  for(int j=i+1;j<list.Length;j++)
  
  { if(list[j]<list[min])
  
  min=j;
  
  }
  
  int t=list[min];
  
  list[min]=list[i];
  
  list[i]=t;
  
  } }
  
  }
  
  public class MainClass
  
  { public static void Main()
  
  {
  
  int[] iArrary=new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
  
  SelectionSorter ss=new SelectionSorter();
  
  ss.Sort(iArrary);
  
  for(int m=0;m<iArrary.Length;m++)
  
  Console.Write("{0} ",iArrary[m]);
  
  Console.WriteLine();
  
  } }
  
  }
  

  
  
  
  插入排序
  
 

 using System;
  
  namespace InsertionSorter
  
  { public class InsertionSorter
  
  { public void Sort(int [] list)
  
  { for(int i=1;i<list.Length;i++)
  
  { int t=list[i];
  
  int j=i;
  
  while((j>0)&&(list[j-1]>t))
  
  { list[j]=list[j-1];
  
  --j;
  
  }
  
  list[j]=t; }
  
  }
  
  }
  
  public class MainClass
  
  { public static void Main()
  
  {
  
  int[] iArrary=new int[]{1,13,3,6,10,55,98,2,87,12,34,75,33,47};
  
  InsertionSorter ii=new InsertionSorter();
  
  ii.Sort(iArrary);
  
  for(int m=0;m<iArrary.Length;m++)
  
  Console.Write("{0}",iArrary[m]);
  
  Console.WriteLine();
  
  } }
  
  }

  
  
  
  
  希尔排序
  
   希尔排序是将组分段,进行插入排序.
  
 

 using System;
  
  namespace ShellSorter
  
  {
  
  public class ShellSorter
  
  {
  
  public void Sort(int [] list)
  
  {
  
  int inc;
  
  for(inc=1;inc<=list.Length/9;inc=3*inc+1);
  
  for(;inc>0;inc/=3)
  
  {
  
  for(int i=inc+1;i<=list.Length;i+=inc)
  
  {
  
  int t=list[i-1];
  
  int j=i;
  
  while((j>inc)&&(list[j-inc-1]>t))
  
  {
  
  list[j-1]=list[j-inc-1];
  
  j-=inc;
  
  }
  
  list[j-1]=t;
  
  } }
  
  } }
  
  public class MainClass
  
  { public static void Main()
  
  {
  
  int[] iArrary=new int[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
  
  ShellSorter sh=new ShellSorter();
  
  sh.Sort(iArrary);
  
  for(int m=0;m<iArrary.Length;m++)
  
  Console.Write("{0} ",iArrary[m]);
  
  Console.WriteLine();
  
  } }
  
  }

c#中通过值和引用传递参数

  出处 CSDN
  
  c#中通过值和引用传递参数(downmoon)
  在 C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员(方法、属性、索引器、运算符和构造函数)更改参数的值,并保持该更改。若要通过引用传递参数,请使用 ref 或 out 关键字。为简单起见,本主题的示例中只使用了 ref 关键字。有关 ref 和 out 之间的差异的信息,请参见、使用 ref 和 out 传递数组。
  
  本主题包括下列章节:
  
  传递值类型参数
  传递引用类型参数
  它还包括以下示例:
  
  示例 演示 是否使用 ref 或 out
  1 通过值传递值类型 否
  2 通过引用传递值类型 是
  3 交换值类型(两个整数) 是
  4 通过值传递引用类型 否
  5 通过引用传递引用类型 是
  6 交换引用类型(两个字符串) 是
  
  传递值类型参数
  值类型变量直接包含其数据,这与引用类型变量不同,后者包含对其数据的引用。因此,向方法传递值类型变量意味着向方法传递变量的一个副本。方法内发生的对参数的更改对该变量中存储的原始数据无任何影响。如果希望所调用的方法更改参数值,必须使用 ref 或 out 关键字通过引用传递该参数。为了简单起见,以下示例使用 ref。
  
  示例 1:通过值传递值类型
  下面的示例演示通过值传递值类型参数。通过值将变量 myInt 传递给方法 SquareIt。方法内发生的任何更改对变量的原始值无任何影响。
  
  // PassingParams1.cs
using System;
class PassingValByVal
{ static void SquareIt(int x) // The parameter x is passed by value.
// Changes to x will not affect the original value of myInt.
{ x *= x;
Console.WriteLine(“The value inside the method: {0}”, x);
}
public static void Main()
{
int myInt = 5;
Console.WriteLine(“The value before calling the method: {0}”, myInt); SquareIt(myInt); // Passing myInt by value.
Console.WriteLine(“The value after calling the method: {0}”, myInt);
}
}
  输出
  The value before calling the method: 5The value inside the method: 25The value after calling the method: 5
  代码讨论
  变量 myInt 为值类型,包含其数据(值 5)。当调用 SquareIt 时,myInt 的内容被复制到参数 x 中,在方法内将该参数求平方。但在 Main 中,myInt 的值在调用 SquareIt 方法之前和之后是相同的。实际上,方法内发生的更改只影响局部变量 x。
  
  示例 2:通过引用传递值类型
  下面的示例除使用 ref 关键字传递参数以外,其余与“示例 1”相同。参数的值在调用方法后发生更改。
  
  // PassingParams2.cs
using System;
class PassingValByRef
{
static void SquareIt(ref int x)
// The parameter x is passed by reference.
// Changes to x will affect the original value of myInt.
{
x *= x;
Console.WriteLine(“The value inside the method: {0}”, x);
}
public static void Main()
{
int myInt = 5;
Console.WriteLine(“The value before calling the method: {0}”, myInt); SquareIt(ref myInt); // Passing myInt by reference.
Console.WriteLine(“The value after calling the method: {0}”, myInt);
}
}
  输出
  The value before calling the method: 5The value inside the method: 25The value after calling the method: 25
  代码讨论
  本示例中,传递的不是 myInt 的值,而是对 myInt 的引用。参数 x 不是 int 类型,它是对 int 的引用(本例中为对 myInt 的引用)。因此,当在方法内对 x 求平方时,实际被求平方的是 x 所引用的项:myInt。
  
  示例 3:交换值类型
  更改所传递参数的值的常见示例是 Swap 方法,在该方法中传递 x 和 y 两个变量,然后使方法交换它们的内容。必须通过引用向 Swap 方法传递参数;否则,方法内所处理的将是参数的本地副本。以下是使用引用参数的 Swap 方法的示例:
  
  static void SwapByRef(ref int x, ref int y){ int temp = x; x = y; y = temp;}
  调用该方法时,请在调用中使用 ref 关键字,如下所示:
  
  SwapByRef (ref i, ref j);
  传递引用类型参数
  引用类型的变量不直接包含其数据;它包含的是对其数据的引用。当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值。但是无法更改引用本身的值;也就是说,不能使用相同的引用为新类分配内存并使之在块外保持。若要这样做,请使用 ref(或 out)关键字传递参数。为了简单起见,以下示例使用 ref。
  
  示例 4:通过值传递引用类型
  下面的示例演示通过值向 Change 方法传递引用类型的参数 myArray。由于该参数是对 myArray 的引用,所以有可能更改数组元素的值。但是,试图将参数重新分配到不同的内存位置时,该操作仅在方法内有效,并不影响原始变量 myArray。
  
  // PassingParams4.cs
// Passing an array to a method without the ref keyword.
// Compare the results to those of Example 5.
using System;
class PassingRefByVal
{
static void Change(int[] arr)
{
arr[0]=888; // This change affects the original element.
arr = new int[5] {-3, -1, -2, -3, -4};
// This change is local. Console.WriteLine(“Inside the method, the first element is: {0}”, arr[0]);
}
public static void Main()
{
int[] myArray = {1,4,5};
Console.WriteLine(“Inside Main, before calling the method, the first element is: {0}”, myArray [0]);
Change(myArray);
Console.WriteLine(“Inside Main, after calling the method, the first element is: {0}”, myArray [0]); }}
  输出
  Inside Main, before calling the method, the first element is: 1Inside the method, the first element is: -3Inside Main, after calling the method, the first element is: 888
  代码讨论
  在上个示例中,数组 myArray 为引用类型,在未使用 ref 参数的情况下传递给方法。在此情况下,将向方法传递指向 myArray 的引用的一个副本。输出显示方法有可能更改数组元素的内容(从 1 改为 888)。但是,在 Change 方法内使用 new 运算符分配新的内存部分,将使变量 arr 引用新的数组。因此,这之后的任何更改都不会影响原始数组 myArray(它是在 Main 内创建的)。实际上,本示例中创建了两个数组,一个在 Main 内,一个在 Change 方法内。
  
  示例 5:通过引用传递引用类型
  本示例除在方法头和调用中使用 ref 关键字以外,其余与“示例 4”相同。方法内发生的任何更改都会影响调用程序中的原始变量。
  
  // PassingParams5.cs
// Passing an array to a method with the ref keyword.
// Compare the results to those of Example 4.
using System;
class PassingRefByRef
{ static void Change(ref int[] arr)
{ // Both of the following changes will affect the original variables:
arr[0]=888;
arr = new int[5] {-3, -1, -2, -3, -4};
Console.WriteLine(“Inside the method, the first element is: {0}”, arr[0]);
}
public static void Main()
{
int[] myArray = {1,4,5};
Console.WriteLine(“Inside Main, before calling the method, the first element is: {0}”, myAr

ray [0]);
Change(ref myArray);
Console.WriteLine(“Inside Main, after calling the method, the first element is: {0}”, myArray [0]);
}
}
  输出
  Inside Main, before calling the method, the first element is: 1Inside the method, the first element is: -3Inside Main, after calling the method, the first element is: -3
  代码讨论
  方法内发生的所有更改都影响 Main 中的原始数组。实际上,使用 new 运算符对原始数组进行了重新分配。因此,调用 Change 方法后,对 myArray 的任何引用都将指向 Change 方法中创建的五个元素的数组。
  
  示例 6:交换两个字符串
  交换字符串是通过引用传递引用类型参数的很好的示例。本示例中,str1 和 str2 两个字符串在 Main 中初始化,并作为由 ref 关键字修饰的参数传递给 SwapStrings 方法。这两个字符串在该方法内以及 Main 内均进行交换。
  
  // PassingParams6.
using System;
class SwappinStrings
{
static void SwapStrings(ref string s1, ref string s2) // The string parameter x is passed by reference. // Any changes on parameters will affect the original variables.
{ string temp = s1;
s1 = s2;
s2 = temp;
Console.WriteLine(“Inside the method: {0}, {1}”, s1, s2);
}
public static void Main()
{
string str1 = “John”;
string str2 = “Smith”;
Console.WriteLine(“Inside Main, before swapping: {0} {1}”, str1, str2); SwapStrings(ref str1, ref str2); // Passing strings by reference Console.WriteLine(“Inside Main, after swapping: {0}, {1}”, str1, str2);
}
}
  输出
  Inside Main, before swapping: John SmithInside the method: Smith, JohnInside Main, after swapping: Smith, John
  代码讨论
  本示例中,需要通过引用传递参数以影响调用程序中的变量。如果同时从方法头和方法调用中移除 ref 关键字,则调用程序中不会发生任何更改。
  

寂寞的谎言

  漫无目的地走过时间的轨迹 ..
  回头的时才发现已过了许久…
  没有人会留意这些岁月的变迁…
  在无助寂寞的夜 … 寂寞撒下了谎言 …
  告诉自己已经是该放下的时候…
  心收得更紧了…

在醉时和自己说已经忘记了…
真心出卖了我的感情..,
于是乎,觉得自己很清醒 ..
不知道该怎么忘记,,,
有好似放下了什么..
  
  仿佛她就在我的身边 …
  但是我感觉不到一丝温柔 ..
  只想自己不要看得太清楚 ..
  自己麻痹自己..
  当一切都是真的..

  学校的夜好宁静..
  静得让人感觉到害怕 …
  ..死一般的寂静
   . .灰一样的夜空 ..
   一个人站在寂寞中 ..
   不知道自己要去哪儿…
   ..要做什么,只是呆了一样的站着 ..
   感觉自己和肉体分离了…
  清醒自己在哪儿站着..
   却茫然的不知道要做什么..
   夜了醉了就想哭 ..
   痛了伤了就想忘…
   发现爱过了以后…
   ..可以收得了手吗?
  
爱过了以后原来是不可以收手的..
   再让我狠狠的抱着你吧..
   因为…………
   …我想你了…
  急剧蜕变的快感….蔓延 蔓延 一直蔓延 ..
  ..直到眼神也暗淡…
   想起一朵花开.. 佛祖趺坐云端..拈花不语 ..
   因为受伤 …所以一直想疗伤..
   …..因为疗伤会痛..所以躲避 ..
而后一直等带溃烂..

   ..我一直以为死了的..
过去的爱情才是不会变的..
   ..我相信奇迹 .. ..但不会在奢望发生在我身上 ..
  看着它发生也不错 .. ..笑一笑,开心瞬间 .. ..辛酸瞬间,然后落幕.. ..别人走别人的,我只停一下..
  ..爱,是让人孤单的堕落 …
  
叫我不想她也难 ..“我的眼睛为什么出汗?” 我闭上眼睛,天就黑了 ..夜了就会寂寞.. 寂寞在夜里就会说谎 .. 寂寞说“有真爱,请相信我。…. 只要我们努力,只要我们坚持 .. 你一定会得到的。”..
  到头,我才发现,所谓的爱是寂寞撒的谎 …