0

私は .NET (実際には IronPython ですが、それは関係ありません) を使用して windforms アプリケーションを作成しており、GUI に CheckedListBox オブジェクトがあります。

正常に動作しています。複数列のレイアウトで約 20 個のアイテムがあります。しかし、私は物事に素敵な内部マージンを与える方法を理解できません-チェックボックスの上、下、左、右の端の周りに約20または30ピクセルの空白を挿入したい.

明確にするために、コンポーネント全体の外側ではなく、CheckedListBox の境界線とその内側のチェックボックスのに空白を表示する必要があります。

うまくいけば、これは簡単な答えです。私はWindowsでのプログラミングが初めてなので、それを見逃しています。それが不可能なら、それも知っておいたほうがいいと思うので、もう時間を無駄にしません。

(これを Swing (Java) で行っていた場合、コンポーネントに Insets を設定するか、空のスペースを含む複合ボーダーを構築することを検討します。)

4

2 に答える 2

0

ネイティブ ウィンドウ コントロールは Padding プロパティをサポートしていません。本当の問題ではありません。BorderStyle を None に設定し、AutoScroll プロパティが True の Panel に配置します。再スケーリングされる可能性があるため、フォームの Load イベントでリスト ボックスのサイズを設定する必要があります。うん、それは間違っているようだ。しかたがない。

于 2010-05-23T21:08:17.420 に答える
0

チェックボックスの周りにスペースを追加しようとしている他の人にとって、最も簡単な方法は、DataGridView を使用して CheckedListBox のように見せることです。これが私のデザイナーコードの一部です:

        // 
        // dgv1
        // 
        this.dgv1.AllowUserToAddRows = false;
        this.dgv1.AllowUserToDeleteRows = false;
        this.dgv1.AllowUserToResizeColumns = false;
        this.dgv1.AllowUserToResizeRows = false;
        this.dgv1.BackgroundColor = System.Drawing.SystemColors.Control;
        this.dgv1.BorderStyle = System.Windows.Forms.BorderStyle.None;
        this.dgv1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
        this.dgv1.ColumnHeadersVisible = false;
        this.dgv1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
        this.dgvcChecked,
        this.dgvcValue});
        dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
        dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control;
        dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText;
        dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Control;
        dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText;
        dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
        this.dgv1.DefaultCellStyle = dataGridViewCellStyle3;
        this.dgv1.Dock = System.Windows.Forms.DockStyle.Fill;
        this.dgv1.EnableHeadersVisualStyles = false;
        this.dgv1.Location = new System.Drawing.Point(7, 21);
        this.dgv1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
        this.dgv1.Name = "dgv1";
        this.dgv1.ReadOnly = true;
        this.dgv1.RowHeadersVisible = false;
        this.dgv1.RowTemplate.Height = 18;
        this.dgv1.RowTemplate.ReadOnly = true;
        this.dgv1.ShowCellErrors = false;
        this.dgv1.ShowCellToolTips = false;
        this.dgv1.ShowEditingIcon = false;
        this.dgv1.ShowRowErrors = false;

チェック項目を取得または設定するには:

    // gets or sets the checked items in dgv1 ( dgvcChecked.Index = 0, dgvcValue.Index = 1 )
    public string[] pSelected { 
        get {  return ( from DataGridViewRow r in dgv1.Rows 
                        where r.Cells[dgvcChecked.Index].Value.Equals(true) 
                        select r.Cells[dgvcValue.Index].Value as string ).ToArray(); 
        }
        set { 
            if (value != null && value.Length > 0)
                foreach (DataGridViewRow r in dgv1.Rows)
                    r.Cells[dgvcChecked.Index].Value = value.Contains(r.Cells[dgvcValue.Index].Value as string);
        }
    }
于 2016-05-09T14:33:50.120 に答える