GTK 等同于 System.Windows.Forms 的 Control.Controls

GTK equivalent to Control.Controls from System.Windows.Forms

我正在尝试找到 Control.Controls 的 GTK 等效项,它仅在 System.Windows.Forms 中可用,ControlCollection 也是如此。

所以我想知道是否有人知道与此等效的 GTK,或者是否有在 GTK 中制作类似内容的解决方案?因为这些函数具有添加和删除等功能,但我找不到这方面的类似内容。

我现在想要更改的代码是这样的:

private void CreatePianoKeys()
        {
            // If piano keys have already been created.
            if (keys != null)
            {
                // Remove and dispose of current piano keys.
                foreach (PianoKey key in keys)
                {
                    Controls.Remove(key);
                    key.Dispose();
                }
            }

            keys = new PianoKey[HighNoteID - LowNoteID];

            whiteKeyCount = 0;

            for (int i = 0; i < keys.Length; i++)
            {
                keys[i] = new PianoKey(this);
                keys[i].NoteID = i + LowNoteID;

                if (KeyTypeTable[keys[i].NoteID] == KeyType.White)
                {
                    whiteKeyCount++;
                }
                else
                {
                    keys[i].NoteOffColor = Color.Black;
                    keys[i].BringToFront();
                }

                keys[i].NoteOnColor = NoteOnColor;

                Controls.Add(keys[i]);
            }
        }

因为我目前正在尝试将 UI 从 WinForms 更改为 GTK,因此它可以在 Linux 发行版上工作。

如有任何帮助,我们将不胜感激!谢谢!

是的,但就像在 .NET 中一样,在 GTK 中,只有某些类型的小部件(.NET-speak 中的“控件”)可以指定其子项(如示例中的 ControlCollection) .这些父控件通常是从 Gtk.Container 基础 class 派生的对象,它实现了 Gtk.Buildable 接口。

您可以使用其 Add()Remove() 方法向任何 Container 对象添加子项,就像在 C# 中对 ControlCollection 对象所做的那样。由于这是一架钢琴,您可以使用 Gtk.Box(或它的子 class),这是一个容器,如果指定为 back-to-back,则在单行中显示其子部件 back-to-back =24=]。因为我不知道你的 class 是什么类型的 PianoKey,所以我无法在 GTK 中推荐一个好的替代方案,但希望能有所帮助。