⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configurationguihelper.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
📖 第 1 页 / 共 2 页
字号:
			HexadecimalBinding binding = new HexadecimalBinding(textBox, defaultValue);
			AddBinding(property, binding);
			textBox.TextChanged += ControlValueChanged;
			return binding;
		}
		
		class HexadecimalBinding : ConfigurationGuiBinding
		{
			TextBoxBase textBox;
			int defaultValue;
			
			public HexadecimalBinding(TextBoxBase textBox, int defaultValue)
			{
				this.textBox = textBox;
				this.defaultValue = defaultValue;
			}
			
			public override void Load()
			{
				int val;
				if (!int.TryParse(Get(defaultValue.ToString(NumberFormatInfo.InvariantInfo)), NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out val)) {
					val = defaultValue;
				}
				textBox.Text = "0x" + val.ToString("x", NumberFormatInfo.InvariantInfo);
			}
			
			public override bool Save()
			{
				string txt = textBox.Text.Trim();
				NumberStyles style = NumberStyles.Integer;
				if (txt.StartsWith("0x")) {
					txt = txt.Substring(2);
					style = NumberStyles.HexNumber;
				}
				int val;
				if (!int.TryParse(txt, style, NumberFormatInfo.InvariantInfo, out val)) {
					textBox.Focus();
					// TODO: Translate Please enter a valid number.
					MessageService.ShowMessage("Please enter a valid number.");
					return false;
				}
				Set(val.ToString(NumberFormatInfo.InvariantInfo));
				return true;
			}
		}
		#endregion
		
		#region Bind enum to ComboBox
		/// <summary>
		/// Bind enum to ComboBox
		/// </summary>
		public ConfigurationGuiBinding BindEnum<T>(string control, string property, params T[] values) where T : struct
		{
			return BindEnum(controlDictionary[control], property, values);
		}
		
		/// <summary>
		/// Bind enum to ComboBox
		/// </summary>
		public ConfigurationGuiBinding BindEnum<T>(Control control, string property, params T[] values) where T : struct
		{
			Type type = typeof(T);
			if (values == null || values.Length == 0) {
				values = (T[])Enum.GetValues(type);
			}
			ComboBox comboBox = control as ComboBox;
			if (comboBox != null) {
				foreach (T element in values) {
					object[] attr = type.GetField(Enum.GetName(type, element)).GetCustomAttributes(typeof(DescriptionAttribute), false);
					string description;
					if (attr.Length > 0) {
						description = StringParser.Parse((attr[0] as DescriptionAttribute).Description);
					} else {
						description = Enum.GetName(type, element);
					}
					comboBox.Items.Add(description);
				}
				string[] valueNames = new string[values.Length];
				for (int i = 0; i < values.Length; i++)
					valueNames[i] = values[i].ToString();
				ComboBoxBinding binding = new ComboBoxBinding(comboBox, valueNames, valueNames[0]);
				AddBinding(property, binding);
				comboBox.SelectedIndexChanged += ControlValueChanged;
				comboBox.KeyDown += ComboBoxKeyDown;
				return binding;
			} else {
				throw new ApplicationException("Cannot bind " + control.GetType().Name + " to enum property.");
			}
		}
		
		/// <summary>
		/// Bind list of strings to ComboBox.
		/// entries: value -> Description
		/// </summary>
		public ConfigurationGuiBinding BindStringEnum(string control, string property, string defaultValue, params KeyValuePair<string, string>[] entries)
		{
			return BindStringEnum(controlDictionary[control], property, defaultValue, entries);
		}
		
		/// <summary>
		/// Bind list of strings to ComboBox.
		/// entries: value -> Description
		/// </summary>
		public ConfigurationGuiBinding BindStringEnum(Control control, string property, string defaultValue, params KeyValuePair<string, string>[] entries)
		{
			ComboBox comboBox = control as ComboBox;
			if (comboBox != null) {
				string[] valueNames = new string[entries.Length];
				for (int i = 0; i < entries.Length; i++) {
					valueNames[i] = entries[i].Key;
					comboBox.Items.Add(StringParser.Parse(entries[i].Value));
				}
				ComboBoxBinding binding = new ComboBoxBinding(comboBox, valueNames, defaultValue);
				AddBinding(property, binding);
				comboBox.SelectedIndexChanged += ControlValueChanged;
				comboBox.KeyDown += ComboBoxKeyDown;
				return binding;
			} else {
				throw new ApplicationException("Cannot bind " + control.GetType().Name + " to enum property.");
			}
		}
		
		class ComboBoxBinding : ConfigurationGuiBinding
		{
			ComboBox control;
			string[] values;
			string defaultValue;
			
			public ComboBoxBinding(ComboBox control, string[] values, string defaultValue)
			{
				this.control = control;
				this.values = values;
				this.defaultValue = defaultValue;
			}
			
			public override void Load()
			{
				string val = Get(defaultValue);
				int i;
				for (i = 0; i < values.Length; i++) {
					if (val.Equals(values[i], StringComparison.OrdinalIgnoreCase))
						break;
				}
				if (i == values.Length) i = 0;
				control.SelectedIndex = i;
			}
			
			public override bool Save()
			{
				Set(values[control.SelectedIndex]);
				return true;
			}
		}
		#endregion
		
		#region Bind enum to RadioButtons
		/// <summary>
		/// Bind enum to RadioButtons
		/// </summary>
		public ConfigurationGuiBinding BindRadioEnum<T>(string property, params KeyValuePair<T, RadioButton>[] values) where T : struct
		{
			RadioEnumBinding<T> binding = new RadioEnumBinding<T>(values);
			AddBinding(property, binding);
			foreach (KeyValuePair<T, RadioButton> pair in values) {
				pair.Value.CheckedChanged += ControlValueChanged;
			}
			return binding;
		}
		
		class RadioEnumBinding<T> : ConfigurationGuiBinding where T : struct
		{
			KeyValuePair<T, RadioButton>[] values;
			
			internal RadioEnumBinding(KeyValuePair<T, RadioButton>[] values)
			{
				this.values = values;
			}
			
			public override void Load()
			{
				T val = Get(values[0].Key);
				int i;
				for (i = 0; i < values.Length; i++) {
					if (val.Equals(values[i].Key))
						break;
				}
				if (i == values.Length) i = 0;
				values[i].Value.Checked = true;
			}
			
			public override bool Save()
			{
				foreach (KeyValuePair<T, RadioButton> pair in values) {
					if (pair.Value.Checked) {
						Set(pair.Key);
						break;
					}
				}
				return true;
			}
		}
		#endregion
		#endregion
		
		#region ConfigurationSelector
		/// <summary>
		/// Gets the height of the configuration selector in pixel.
		/// </summary>
		public const int ConfigurationSelectorHeight = 30;
		
		public Control CreateConfigurationSelector()
		{
			return new ConfigurationSelector(this);
		}
		
		public void AddConfigurationSelector(Control parent)
		{
			foreach (Control ctl in parent.Controls) {
				ctl.Top += ConfigurationSelectorHeight;
			}
			Control sel = CreateConfigurationSelector();
			sel.Width = parent.ClientSize.Width;
			parent.Controls.Add(sel);
			parent.Controls.SetChildIndex(sel, 0);
			sel.Anchor |= AnchorStyles.Right;
		}
		
		sealed class ConfigurationSelector : Panel
		{
			ConfigurationGuiHelper helper;
			Label    configurationLabel = new Label();
			ComboBox configurationComboBox = new ComboBox();
			Label    platformLabel = new Label();
			ComboBox platformComboBox = new ComboBox();
			Control  line = new Control();
			
			public ConfigurationSelector(ConfigurationGuiHelper helper)
			{
				const int marginTop  = 4;
				const int marginLeft = 4;
				this.helper = helper;
				this.Height = ConfigurationSelectorHeight;
				configurationLabel.Text      = StringParser.Parse("${res:Dialog.ProjectOptions.Configuration}:");
				configurationLabel.TextAlign = ContentAlignment.MiddleRight;
				configurationLabel.Location  = new Point(marginLeft, marginTop);
				configurationLabel.Width     = 80;
				configurationComboBox.Location      = new Point(4 + configurationLabel.Right, marginTop);
				configurationComboBox.Width         = 120;
				configurationComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
				platformLabel.Text      = StringParser.Parse("${res:Dialog.ProjectOptions.Platform}:");
				platformLabel.TextAlign = ContentAlignment.MiddleRight;
				platformLabel.Location  = new Point(4 + configurationComboBox.Right, marginTop);
				platformLabel.Width     = 68;
				platformComboBox.Location      = new Point(4 + platformLabel.Right, marginTop);
				platformComboBox.Width         = 120;
				platformComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
				line.Bounds    = new Rectangle(marginLeft, ConfigurationSelectorHeight - 2, Width - marginLeft * 2, ConfigurationSelectorHeight - 2);
				line.BackColor = SystemColors.ControlDark;
				this.Controls.AddRange(new Control[] { configurationLabel, configurationComboBox, platformLabel, platformComboBox, line });
				line.Anchor |= AnchorStyles.Right;
				FillBoxes();
				configurationComboBox.SelectedIndexChanged += ConfigurationChanged;
				platformComboBox.SelectedIndexChanged      += ConfigurationChanged;
			}
			
			void FillBoxes()
			{
				List<string> items;
				configurationComboBox.Items.Clear();
				items = helper.Project.GetConfigurationNames();
				items.Sort();
				configurationComboBox.Items.AddRange(items.ToArray());
				platformComboBox.Items.Clear();
				items = helper.Project.GetPlatformNames();
				items.Sort();
				platformComboBox.Items.AddRange(items.ToArray());
				ResetIndex();
			}
			
			bool resettingIndex;
			
			void ResetIndex()
			{
				resettingIndex = true;
				configurationComboBox.SelectedIndex = configurationComboBox.Items.IndexOf(helper.Configuration);
				platformComboBox.SelectedIndex      = platformComboBox.Items.IndexOf(helper.Platform);
				resettingIndex = false;
			}
			
			void ConfigurationChanged(object sender, EventArgs e)
			{
				if (resettingIndex) return;
				if (helper.IsDirty) {
					if (!MessageService.AskQuestion("${res:Dialog.ProjectOptions.ContinueSwitchConfiguration}")) {
						ResetIndex();
						return;
					}
					if (!helper.Save()) {
						ResetIndex();
						return;
					}
				}
				helper.Configuration = (string)configurationComboBox.SelectedItem;
				helper.Platform      = (string)platformComboBox.SelectedItem;
				helper.Load();
			}
		}
		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -