福州网站建设推广平台,python做网站还是数据库,威县做网站哪儿好,成都软件制作2023年#xff0c;第38周。给自己一个目标#xff0c;然后坚持总会有收货#xff0c;不信你试试#xff01; 在实际项目中#xff0c;我们可能会用到一些窗体做一些小工具或者小功能。比如#xff1a;运行程序#xff0c;在主窗体A基础上#xff0c;点击某个按钮希望能… 2023年第38周。给自己一个目标然后坚持总会有收货不信你试试 在实际项目中我们可能会用到一些窗体做一些小工具或者小功能。比如运行程序在主窗体A基础上点击某个按钮希望能够弹出B窗体 在B窗体完成操作后希望能够把值传递回到A窗体然后进行其他业务操作。 目录 一、显示线上图片二、显示本地图片三、A窗体打开B窗体四、事件机制传递值4.1、订阅事件4.2、事件机制 五、基础概念5.1、委托Delegate5.2、事件Event5.3、消息Message5.4、发布Publish和订阅Subscribe 一、显示线上图片
要在C# WinForm中动态为PictureBox控件赋值图片链接你可以使用Image.FromUrl方法来加载远程图片并将其分配给PictureBox的Image属性。
下面是一个简单的示例代码
首先在你的WinForm窗体上添加一个PictureBox控件。
然后在窗体的代码文件中添加以下引用
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Net;接下来在你想赋值图片链接的事件中如按钮点击事件添加以下代码
private void button1_Click(object sender, EventArgs e)
{try{// 获取图片链接string imageUrl https://example.com/image.jpg; // 替换为你的图片链接// 使用WebClient下载图片WebClient client new WebClient();byte[] imageData client.DownloadData(imageUrl);MemoryStream ms new MemoryStream(imageData);// 创建并分配图片给PictureBoxImage image Image.FromStream(ms);pictureBox1.Image image;}catch (Exception ex){// 处理异常MessageBox.Show(加载图片时出错 ex.Message);}
}在上述示例中我们使用WebClient来下载图片数据并将其转换为Image对象。 然后我们将该图像分配给PictureBox的Image属性这样就可以在窗体上显示图片了。 注意为了正常运行示例请确保你的应用程序能够访问指定的图片链接。
二、显示本地图片
要在C# WinForm中加载本地图片到PictureBox控件你可以使用Image.FromFile方法来加载本地图片文件并将其分配给PictureBox的Image属性。
下面是一个简单的示例代码
首先在你的WinForm窗体上添加一个PictureBox控件。
然后在窗体的代码文件中添加以下引用
using System;
using System.Drawing;
using System.Windows.Forms;接下来在你想加载本地图片的事件中如按钮点击事件添加以下代码
private void button1_Click(object sender, EventArgs e)
{try{// 获取本地图片文件路径string imagePath C:\\path\\to\\your\\image.jpg; // 替换为你的图片文件路径// 加载本地图片文件Image image Image.FromFile(imagePath);// 将图片分配给PictureBoxpictureBox1.Image image;}catch (Exception ex){// 处理异常MessageBox.Show(加载图片时出错 ex.Message);}
}在上述示例中我们使用Image.FromFile方法加载指定路径的图片文件并将其转换为Image对象。 然后我们将该图像分配给PictureBox的Image属性从而在窗体上显示图片。 请注意替换示例代码中的imagePath为你实际的本地图片文件路径。
三、A窗体打开B窗体
在C# WinForm中打开另一个窗体你可以使用Form类的实例来创建一个新的窗体并调用其Show或ShowDialog方法来显示它。
下面是一个简单的示例代码
假设你已经创建了两个窗体Form1和Form2。
在Form1窗体中你可以添加一个按钮在按钮的点击事件中打开Form2窗体。代码如下
private void button1_Click(object sender, EventArgs e)
{// 创建Form2窗体实例Form2 form2 new Form2();// 显示Form2窗体form2.Show();
}如果你希望以模态的方式打开另一个窗体即Form2完全显示后才能继续操作Form1你可以使用ShowDialog方法。
示例代码如下
private void button1_Click(object sender, EventArgs e)
{// 创建Form2窗体实例Form2 form2 new Form2();// 以模态方式显示Form2窗体form2.ShowDialog();
}在上述示例中我们首先创建了要打开的窗体实例然后调用Show方法或ShowDialog方法来显示该窗体。 四、事件机制传递值
要将从B窗体选择的值传递给A窗体你可以通过以下几种方式实现
4.1、订阅事件
在B窗体中定义一个属性或字段用于保存所选的值。当B窗体关闭时将选定的值传递回A窗体。
在B窗体的代码中可以定义一个公共属性或字段来保存所选的值
public string SelectedValue { get; set; }在B窗体中的事件如按钮点击事件中将所选的值赋给SelectedValue
private void button1_Click(object sender, EventArgs e)
{SelectedValue comboBox1.SelectedItem.ToString();this.Close();
}在A窗体的代码中创建B窗体的实例并订阅B窗体的FormClosing事件来获取所选的值
private void button1_Click(object sender, EventArgs e)
{BForm bForm new BForm();bForm.FormClosing (s, args) {if (!string.IsNullOrEmpty(bForm.SelectedValue)){// 使用bForm.SelectedValue在A窗体中进行操作MessageBox.Show(bForm.SelectedValue);}};bForm.ShowDialog();
}4.2、事件机制
使用委托Delegate和事件Event机制来传递值。
在B窗体的代码中首先定义一个委托和事件
public delegate void ValueSelectedEventHandler(string selectedValue);
public event ValueSelectedEventHandler ValueSelected;在B窗体中的事件如按钮点击事件中触发事件并传递所选的值
private void button1_Click(object sender, EventArgs e)
{string selectedValue comboBox1.SelectedItem.ToString();ValueSelected?.Invoke(selectedValue);this.Close();
}在A窗体的代码中创建B窗体的实例并订阅B窗体的事件来获取所选的值
private void button1_Click(object sender, EventArgs e)
{BForm bForm new BForm();bForm.ValueSelected (selectedValue) {// 使用selectedValue在A窗体中进行操作MessageBox.Show(selectedValue);};bForm.ShowDialog();
}通过上述方法之一你可以在A窗体中获取从B窗体选择的值并在需要的地方进行操作。 五、基础概念
在 C# 中委托Delegate、事件Event、消息Message、发布Publish和订阅Subscribe是几个相关的概念它们之间有一些关系和联系。
下面简要介绍它们之间的关系
5.1、委托Delegate
委托是一种类型它可以引用一个或多个方法并允许通过委托调用这些方法。委托提供了一种将方法作为参数传递的机制并允许以回调的方式进行函数调用。
5.2、事件Event
事件是基于委托的机制用于实现一种对象间的通信和互动。对象可以将事件定义为其成员并在特定条件下引发触发事件。其他对象可以订阅或注册事件以便在事件发生时接收通知并执行相应的处理方法。
5.3、消息Message
消息是一种用于对象之间交换数据和信息的机制。它在不同的组件之间传递以触发相应的行为或操作。消息可以是同步或异步的可以包含参数、事件或其他数据。
5.4、发布Publish和订阅Subscribe
发布-订阅模式是一种软件设计模式用于实现对象之间的解耦和松散耦合。在该模式中一个对象发布者通知其他对象订阅者发生了某个事件或发出了某个消息订阅者可以选择性地接收并处理这些事件或消息。 在 C# 中通常通过定义委托和事件来实现发布-订阅模式发布者发布事件而订阅者订阅并处理事件。 事件是一种特殊类型的委托它可以提供更高级别的封装和安全性。 通过委托和事件可以实现对象之间的松耦合通信以实现更灵活、可扩展和可维护的代码结构。