【问题标题】:C# text box similar to Sticky Notes in Windows类似于 Windows 中的便笺的 C# 文本框
【发布时间】:2021-11-18 18:44:36
【问题描述】:

我想在 Windows 中添加带有文本的矩形区域,例如 StickyNotes 应用程序。在 Windows 便笺中,您可以添加矩形区域,通过单击它们可以更改其中的文本。同样在便笺中,您可以通过单击按钮添加这些矩形。

我想要类似的效果,但不知道应该使用 Visual Studio 2019 工具栏菜单中的哪个组件?

点击后的便签:

我正在使用 Winform、Visual Studio 2019 和 C# 编码。

【问题讨论】:

  • 您可以向文本框添加命令以生成类似于便笺的新表单。不过,这不会出现在 VS 工具菜单中。您将要为“单击后”的注释创建一个新类,然后添加逻辑以在文本框后面的代码中创建它。您还应该编辑您的问题以指定您使用的 GUI 工具。 WPF?表格? MFC? UWP?
  • 文本框看起来与便笺矩形不同。在便笺中,您只能通过单击它们来编辑文本。单击弹出窗口后,您可以按照我的问题中的第二张图片进行编辑。我应该改用面板吗? @dmedine
  • 如果您不希望文本框可编辑,则将其设为只读。但这似乎不是你的问题。它似乎是关于生成类似于便签对话框的表单。此外,调整外观(以及其他很多)取决于您使用的框架。您应该编辑您的帖子以说明您使用的是什么框架。否则,任何人都无法为您的问题提供有用的答案。
  • @dmedine 我编辑了,在我的问题下方带有粗体文本。它是 Winform VS 2019 C# 应用程序。你还想知道什么?
  • @dmedine 和再次文本框大小是固定的,你不能改变文本框的高度,如果我没记错的话。

标签: c# visual-studio user-interface


【解决方案1】:

经过少量研究,我相信我可以使用 Panel 和 FlowLayout 实现相同的效果。我在我的表单中创建了一个主TodoListFlowLayout,并创建了另一个按钮来控制这个TodoListFlowLayout。通过单击按钮,我填充了 FlowLayout,如下所示:

Random random = new Random(); // Make it critiacally depended.

private void button1_Click(object sender, EventArgs e)
{
    Panel toDoElement = new Panel();

    toDoElement.Name = "panel" + (TodoListFlowLayout.Controls.Count + 1);
    toDoElement.BackColor = Color.FromArgb(123, random.Next(222), random.Next(222));
    toDoElement.Size = new Size(TodoListFlowLayout.ClientSize.Width, 50);

    TodoListFlowLayout.Controls.Add(toDoElement);
    TodoListFlowLayout.Controls.SetChildIndex(toDoElement, 0);  
                                                     
    toDoElement.Paint += (ss, ee) => { ee.Graphics.DrawString(toDoElement.Name, Font, Brushes.White, 22, 11); };
    TodoListFlowLayout.Invalidate();
}

您可以通过以下方式创建点击事件:

toDoElement.Click += todo_Element_Panel_Click;

和函数:

void todo_Element_Panel_Click(object sender, EventArgs e)
{

}

最后你可以让它滚动

    TodoListFlowLayout.AutoScroll = false;
    TodoListFlowLayout.HorizontalScroll.Enabled = false;
    TodoListFlowLayout.HorizontalScroll.Visible = false;
    TodoListFlowLayout.HorizontalScroll.Maximum = 0;
    TodoListFlowLayout.AutoScroll = true; 

输出如下:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2014-09-05
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多