Con*_*ers 1 c# image-gallery winforms
如果这是一个愚蠢的问题,请原谅我。我对 C# 有少量经验,但还没有达到这个程度。
我有一系列图像,我想将它们放入一个网格中,每个图像周围都有空间,还有它们下方的文本,我希望它们是可点击的,所以当它们被点击时,它们会被点击,双击运行一个事件。我对此的最佳示例是程序的用户界面ACDSee
。我已经用谷歌搜索了几个小时,并没有想出任何适用的东西。这是困难还是简单?谁能给我一个例子,或者指出我正确的方向?
干杯。
好像不是特别难。我建议采取以下步骤:
PictureBox
和一个Label
或LinkLabel
。Padding
用户控件的属性即可。FlowLayoutPanel
,然后简单地将上述用户控件的实例添加到此面板。IsSelected
为用户控件实现一个属性。Click
用户控件的事件并将所有缩略图实例的事件分配给单个事件处理程序方法。存储对已选择缩略图的全局引用,将其命名为例如SelectedThumbnail
初始化为 null。在事件处理程序主体中,将sender
与全局进行比较SelectedThumbnail
,并在需要时更新它。如果与 关联的用户控件sender
未被选中(即,其背景不是蓝色,或者IsSelected
是false
),则将其选中,或更改其背景。否则将背景更改为其默认颜色(例如,控制面)。该Click
事件处理程序的身体看起来是这样的:
MyThumbnailControl ctrl = sender as MyThumbnailControl;
if(ctrl == null) return;
if(ctrl == SelectedThumbnail) return; // selected again
if(ctrl != SelectedThumbnail)
{
ctrl.IsSelected = true;
ctrl.BackColor = Color.Blue;
// it's better to set the back-color in the IsSelected property setter, not here
SelectedThumbnail.IsSelected = false;
SelectedThumbnail.BackColor = Color.Control;
SelectedThumbnail = ctrl; // important part
}
Run Code Online (Sandbox Code Playgroud)
还建议将要添加到所谓网格的所有缩略图实例也引用到单独的数组中。因此,通过简单的索引计算可以使用箭头键更改选择。
进一步说明:我假设要创建的用户控件名为MyThumbnailControl
,只是一个随机名称来引用该控件。当您创建一个新的用户控件时,向导会为您生成一个具有您想要的名称(例如MyThumbnailControl
)的类,您可以在其中定义一个名为name的属性IsSelected
并实现其 getter 和 setter。请参阅此教程。定义用户控件后,您可以从其相应的类中实例化实例。同样通过全局引用,我指的是表单(或任何父控件)级别的变量。为简单起见,我们可以在将要保存网格和缩略图的表单中添加所选缩略图的引用:MyThumbnailControl selectedThumb = null;
或在表单正文中添加类似的内容。
归档时间: |
|
查看次数: |
8765 次 |
最近记录: |