Самый простой способ - использовать полупрозрачный фоновый PNG-образ.
Вы можете использовать JavaScript, чтобы он работал в Internet Explorer 6
, если вам нужно.
Я использую метод, описанный в Прозрачные PNG в Internet Explorer 6 .
Кроме этого,
вы можете подделать его с помощью two side-by-side sibling elements
- сделать один полупрозрачный, затем absolutely position the other over the top
?
Это имеет отношение, как привязка данных настраивается в dotnet платформе, особенно BindingContext
. На высоком уровне это означает, что, если Вы не определили иначе, каждая форма и все средства управления формы совместно используют тот же BindingContext
. Когда Вы установите DataSource
, свойство эти ComboBox
будет использовать BindingContext
для получения ConcurrenyMangager
, который обертывает список. Эти ConcurrenyManager
отслеживает такие вещи как текущее выбранное положение в списке.
, Когда Вы устанавливаете DataSource
из вторых ComboBox
, это будет использовать тот же BindingContext
(формы), который приведет к ссылке на тот же ConcurrencyManager
как выше используемого для установки привязки данных.
Для получения более подробного объяснения см. BindingContext.
Лучшее обходное решение (в зависимости от размера источника данных) должно объявить два BindingSource
, объекты (новый с 2,00) связывают набор с теми и затем связывают тех с полями комбинированного списка.
я включаю полный пример.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
private BindingSource source1 = new BindingSource();
private BindingSource source2 = new BindingSource();
public Form1()
{
InitializeComponent();
Load += new EventHandler(Form1Load);
}
void Form1Load(object sender, EventArgs e)
{
List<string> myitems = new List<string>
{
"Item 1",
"Item 2",
"Item 3"
};
ComboBox box = new ComboBox();
box.Bounds = new Rectangle(10, 10, 100, 50);
source1.DataSource = myitems;
box.DataSource = source1;
ComboBox box2 = new ComboBox();
box2.Bounds = new Rectangle(10, 80, 100, 50);
source2.DataSource = myitems;
box2.DataSource = source2;
Controls.Add(box);
Controls.Add(box2);
}
}
}
, Если Вы хотите смутить себя еще больше тогда, всегда пытаются объявить привязку в конструкторе. Это может привести к [приблизительно 112] действительно любопытные ошибки, следовательно я всегда связываю в событии Load.