如何动态创建 C# 面板

2024-04-23

我创建了一个联系人管理器。用户已经可以输入一些内容并将它们存储在文件中并在程序启动时重新打开。每个联系人都是我的 Person 类的一个对象。

启动程序时(在 Load() 中),我创建了一个 for 循环,直到探索完所有联系人(在 Person 表中打开时存储联系人)

现在我来解决我的问题:

我有一个可滚动的面板(我已启用该选项),我希望每 50 个像素高度创建一个新面板,其中包含我的联系人的姓名、名字、电子邮件和电话号码以及图片框。

除此之外,我希望能够动态地执行此操作,而不是创建相同的内容超过 50 次并重复相同的代码 50 次

因为目前我已经这样做了:

for(int i = 0; i < contacts.Count; i++) //Afficher les contacts
        {
            if(!panel_contact1.Visible)
            {
                panel_contact1.Visible = true;
                label_prenom_nom1.Text = contacts[i].Prenom + " " + contacts[i].Nom;
                label_email1.Text = contacts[i].mail;
                label_tel1.Text = contacts[i].tel;
                pictureBox1.Image = Image.FromFile(contacts[i].pathImage);

            }
            else if(!panel_contact2.Visible)
            {
                panel_contact2.Visible = true;
                label_prenom_nom2.Text = contacts[i].Prenom + " " + contacts[i].Nom;
                label_email2.Text = contacts[i].mail;
                label_tel2.Text = contacts[i].tel;
                pictureBox2.Image = Image.FromFile(contacts[i].pathImage);

            }
                    
        }

该代码仅适用于前两个联系人,我不想重复最多 100 次。

所以我的问题是: 如何创建面板,在每个标签和图片框中,每个面板中每隔 50 像素。

感谢您的阅读,如果您只是有建议,如果你们都有代码,那么我是一个接受者,特别是因为我认为这应该很容易做到,因为标签的内容已经是动态教学的。

谢谢。


在 WinForms 上,您可以使用以下命令:

int x = 0;
int y = 0;
int delta = 10;
for ( int i = 0; i < contacts.Count; i++ )
{
  // Create picture box
  var picture = new PictureBox();
  picture.Image = Image.FromFile(contacts[i].pathImage);
  picture.Location = new Point(x, y);
  picture.Size = new Size(picture.Image.Width, picture.Image.Height);
  int dx = picture.Width + delta;
  // Create name label
  var labelName = new Label();
  labelName.AutoSize = true;
  labelName.Location = new Point(x + dx, y);
  labelName.Font = new Font(labelName.Font, FontStyle.Bold);
  labelName.Text = contacts[i].Prenom + " " + contacts[i].Nom;
  // Create mail label
  var labelMail = new Label();
  labelMail.AutoSize = true;
  labelMail.Location = new Point(x + dx, y + labelName.Height);
  labelMail.Text = contacts[i].mail;
  // Create phone label
  var labelPhone = new Label();
  labelPhone.AutoSize = true;
  labelPhone.Location = new Point(x + dx, y + labelName.Height + labelMail.Height);
  labelPhone.Text = contacts[i].tel;
  // Add controls
  panel.Controls.Add(picture);
  panel.Controls.Add(labelName);
  panel.Controls.Add(labelMail);
  panel.Controls.Add(labelPhone);
  // Iterate
  int dy1 = labelName.Height + labelMail.Height + labelPhone.Height;
  int dy2 = picture.Height;
  y += Math.Max(dy1, dy2) + delta;
}

但您可能更喜欢创建一个自定义控件,在其中放置一个图片框和三个根据您想要的颜色、字体大小、粗体、边距、边框样式等设计的标签,高度为 50。

添加新的用户自定义控件Project > Add > User control并选择一个文件名,例如PersonControl.

public partial class PersonControl : UserControl
{
  public PersonControl()
  {
    InitializeComponent();
  }
  public PersonControl(Person person) : this()
  {
    pictureBox.Image = Image.FromFile(person.pathImage);
    labelName.Text = person.Prenom + " " + person.Nom;
    labelMail.Text = person.mail;
    labelPhone.Text = person.tel;
  }
}
int x = 0;
int y = 0;
for ( int i = 0; i < contacts.Count; i++ )
{
  var control = new PersonControl(contacts[i]);
  control.Location = new Point(x, y);
  panel.Controls.Add(control);
  y += control.Height;
}

您应该注意所有文件图像的大小必须相同,并且与图片框相同,否则您需要通过调整大小来管理它。

如何调整图像大小 C# https://stackoverflow.com/questions/1922040/how-to-resize-an-image-c-sharp

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何动态创建 C# 面板 的相关文章

  • nUnit Assert.That委托并发问题

    我的代码中遇到了一些暂时的死锁 无法解决它 简单的代码 我无法创建一个简单的调用链来重现代码InvokeChangeEvent Test public async void Test sut InvokeChangeEvent foo fi
  • 为什么隐式类型转换没有警告?

    我终于发现了程序中的一个错误 该错误是由返回类型的隐式类型转换引起的 即使g Wall对此没有任何警告 我想知道是否有什么办法可以快速找出这种无意识的错误 include
  • C# 中的通用 foreach 循环

    给出以下代码的编译器告诉我 使用未分配的局部变量 x 有什么想法吗 public delegate Y Function
  • C# 如何比较两个字符串并指出哪些部分不同

    例如 如果我有 string a personil string b personal 我想得到 string c person i l 然而 它不一定是单个字符 我也可以这样 string a disfuncshunal string b
  • 了解左值到右值转换的示例

    我很难理解这段代码 来自 C 14 草案标准的示例 转换拉瓦尔 调用未定义的行为g false 为什么constexpr使程序有效 另外 不访问 是什么意思 y n 在两次通话中g 我们正在返回n数据成员那么为什么最后一行说它不能访问它呢
  • 为什么 Resources.Load 返回 null?

    我的项目有多个精灵 位于 Assets Sprites 中 我想使用 C 脚本加载它们 我已经测试过这个 Sprite myFruit Resources Load
  • Xamarin 中 QR 扫描后的处理对话框

    我在Xamarin应用程序中使用QR码扫描仪 当它扫描QR码时 它会执行一些操作 大约需要一分钟 而在执行操作时 我想在屏幕上显示一个加载对话框 但是 它没有显示在屏幕上 并且在应用程序的其他地方 它运行得很好 Code var expec
  • C 程序的“编译器正确”命令

    这是关于中提到的编译步骤Linux 期刊文章 https www linuxjournal com article 6463 C 程序是使用编译的cpp cc1 as and ld该文章中的命令 我能够执行这些步骤cpp as and ld
  • 使用 SFML 绘制文本时出现段错误

    我做了一个Button应该绘制一些顶点和字符串的类RenderWindow 这是删除了不相关部分的代码 here http pastebin com 4a5RuS2y是完整的代码 namespace game class Button pu
  • 如何在cmake中添加cuda源代码的定义

    我使用的是 Visual Studio 2013 Windows 10 CMake 3 5 1 一切都可以使用标准 C 正确编译 例如 CMakeLists txt project Test add definitions D WINDOW
  • C# - 当站点上没有活动时,Quartz 调度程序停止运行

    我用quartz调度器创建了asp net站点 该作业正在后台运行 站点上没有其他活动 Quartz 调度程序每 30 分钟调度一次 IIS启动后 Scheduler运行正常 但一段时间后 Scheduler 停止运行 大约 1 小时 如果
  • 托管 C++ 和 AnyCPU

    我有一个托管 C dll 我从 C 项目中引用它 C 项目将被编译为 AnyCPU 有没有办法编译 32 位和 64 位版本的托管 C dll 然后告诉 C 项目在运行时根据正在运行的体系结构加载正确的版本 让 AnyCPU dll 与 C
  • 仅使用 url 嵌入视频

    给定一个 youtube url 我如何使用 net c 将视频嵌入到页面中 只需添加如下一行 将 autoplay 设置为 0 或 1 取决于您是否希望人们真正留在您的页面上
  • GoogleTest:如何跳过测试?

    使用 Google Test 1 6 Windows 7 Visual Studio C 如何关闭给定的测试 又名如何阻止测试运行 除了注释掉整个测试之外 我还能做些什么吗 The docs https github com google
  • BackgroundWorker 如何决定在哪个线程上运行 RunWorkerCompleted 处理程序?

    我试图弄清楚 BGW 在工作完成后如何决定运行 RunWorkerCompleted 处理程序的线程 我的初始测试使用 WinForm 应用程序 在 UI 线程上 我开始bgw1 RunWorkerAsync 然后我尝试开始bgw2 Run
  • 以编程方式将 Word 文件另存为图片

    我想将Word文档的第一页另存为图片 使用 C 有什么方法可以做到这一点 您可以将 Word 文档打印到 XPS 文档 在 WPF Net 3 5 应用程序中打开它 并使用 WPF 框架的文档和图像功能将第一个内部固定页面对象转换为位图 如
  • 我试图使这段代码递归,但由于某种原因它不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我试图使这
  • 指针 (*argv[]) 的指针的指针算术?

    我知道foo bar 等于 foo bar 但是什么是 foo bar 等于 例如访问 argv 2 我对这一点的理解有些困惑 我认为可能是这样的 foo bar 但我不确定 如果这是一个简单的答案 我深表歉意 a b 相当于 a b 由于
  • C# StreamReader 使用分隔符保存到数组

    我有一个文本文件 其中包含制表符分隔的数据 我在 C 应用程序中需要的是从文本文件中读取一行并将它们保存到一个数组中 在每个位置将它们分开 t 然后我对下一行做同样的事情 My code StreamReader sr new Stream
  • 提高大型结构列表的二进制序列化性能

    我有一个以 3 个整数保存 3d 坐标的结构 在测试中 我将 100 万个随机点放在一起 List 然后对内存流使用二进制序列化 内存流大小约为 21 MB 这似乎非常低效 因为 1000000 点 3 坐标 4 字节应该至少为 11MB

随机推荐

  • ECMAScript 规范是否允许 Array 成为“超类”?

    我正在寻找任何迹象表明 超类化 内置类型是否有效根据规格 也就是说 给定任何假设的 ECMAScript 一致实现 超类化 内置函数是否会通过影响类构造函数的创建算法来破坏运行时 超一流 我创造的一个术语 指的是一个类 其通过构造它或将其作
  • Cookie 未设置或首次不起作用

    在每个页面上 我都设置了一个 cookie 来为与该会话对应的标题按钮着色 问题是 当我第一次在不同的部分打开页面时 cookie 仍然是旧的 彩色按钮也是如此 然后 如果我再次单击同一按钮 则 cookie 会被正确设置 为什么 这是我的
  • 为什么苹果设备在自己的播放器中播放html5视频?

    我尝试了不同的 html 播放器并使用 html5 视频标签 然而 苹果设备 ipod touch 4 iphone 4 ipad 在其中显示 html5 视频自己的球员 我的主要目标是在视频上显示叠加广告 我决定借助绝对定位和 z ind
  • iOS4:如何使用视频文件作为 OpenGL 纹理?

    我正在尝试将视频文件的内容 暂时不包含音频 显示到 OpenGL 中的 UV 映射 3D 对象上 我已经在 OpenGL 中做了相当多的工作 但不知道从哪里开始处理视频文件 而且大多数示例似乎都是从相机获取视频帧 这不是我想要的 目前我觉得
  • 列表切片的迭代

    我想要一个算法来迭代列表切片 切片大小在函数外部设置并且可以不同 在我看来 它是这样的 for list of x items in fatherList foo list of x items 有没有办法正确定义list of x ite
  • 如何使 raiserror 和 nowait 与 sqlcmd 一起使用?

    这是命令行 sqlcmd S localhost U myuser P mypwd b r0 Q raiserror hello 10 1 with nowait waitfor delay 00 00 10 raiserror world
  • 无法使用 PayPal 模块处理交易

    我正在尝试测试 Python 和 Paypal 集成 这是我对 PayPal 模块的调用 http www chickenwingsw com paypal on python http www chickenwingsw com payp
  • 根据列的值从其他列获取值

    对于数据框中的每一行 我想根据第三列中的值将值从一列复制到另一列 我尝试使用组合的 for 循环和 if 函数来做到这一点 example condition lt c 1 2 2 1 2 3 3 SZ01 lt c 1 1 1 1 1 1
  • Web 服务资源管理器错误 500

    使用最新版本的 eclipse Luna java ee 下载 启动 Web Services Explorer 时收到 HTTP ERROR 500 控制台中没有消息 故障 防火墙 Windows 和 AV 已关闭 有什么建议么 我通过更
  • 除非调整浏览器窗口大小,否则 Angular ui 网格不会显示内容

    我正在使用 angularjs 1 5 0 和 Angular ui grid 3 1 1 当我在控制器主体中分配 gridOptions 传递给网格指令 对象时 如下所示 scope gridOptions data mock2 1 mo
  • 网站底部的空白区域

    我正在尝试消除我即将推出的投资组合网站底部的空白区域 http codymiracle com http codymiracle com 发生的情况是 在大多数显示器上 页脚似乎太长或太短 要么我在非常小的窗口上滚动 要么更常见的是较大的分
  • 如何在 python 中将浮点数格式化为字符串?

    def main M float input Please enter sales for Monday T float input Please enter sales for Tuesday W float input Please e
  • 编译时引用.NET dll(使用单声道)

    我问了一个安装 F powerpack 并使用它的问题here https stackoverflow com questions 6206406 how to install and use f powerpack in mono err
  • 为 Windows 7 构建自定义凭据提供程序

    在查看了为 Windows 7 构建自定义凭据提供程序的代码后 我设法让自己的磁贴显示在登录屏幕上 并且可以作为所需用户登录 但是 我正在尝试实现一个系统 其中事件 范围内的蓝牙设备 触发登录 解锁 而无需单击磁贴 我可以设置它自动填写密码
  • iPhone |从头开始构建新版本的核心数据迁移

    我正在开发应用程序更新 这个版本完全是从头开始构建的 并且具有全新的功能coreData模型架构 我需要写coreData从旧模型迁移 我一直在寻找资源来写作coreData迁移但都需要旧模型文件 由于这个版本是全新的 所以我没有旧的模型架
  • 连接报告服务中字段的不同行值

    我在报告服务中有一份报告 我想连接以逗号分隔的列的所有不同值 并将该值放入文本框中 我知道我可以使用答案之一在 SQL 中做到这一点here https stackoverflow com questions 4670920 how to
  • 将嵌套的json数组插入sql server中的多个表中

    我在 Sql 服务器中有以下 Json 对象 我想将此数据插入多个表及其关系 即外键 DECLARE JsonObject NVARCHAR MAX N FirstElement Name ABC Location East US Regi
  • 蟒蛇2; pip parse_requirements 与 --trusted-host 和 --extra-index-url

    我在用 install requires str ir req for ir in parse requirements requirements txt session PipSession with pip install 但是 这似乎
  • 处理 save() 方法 $ngResource 上的错误回调

    我需要处理更新操作的错误回调 为此我正在使用方法save 像这样 scope save function params MigParams save params Migparams服务看起来像这样 angular module monit
  • 如何动态创建 C# 面板

    我创建了一个联系人管理器 用户已经可以输入一些内容并将它们存储在文件中并在程序启动时重新打开 每个联系人都是我的 Person 类的一个对象 启动程序时 在 Load 中 我创建了一个 for 循环 直到探索完所有联系人 在 Person