Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WebForms / System / Web / UI / Design / Util / AutoSizeComboBox.cs / 1 / AutoSizeComboBox.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.Design.Util { using System; using System.Design; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.Design; ////// Helper class to automatically resize the dropdown part of a ComboBox /// to fit the widest item. /// Note that if you modify the Items collection of the control, you will /// have to call InvalidateDropDownWidth so that it will be auto-resized /// the next time the combobox is dropped down. /// internal sealed class AutoSizeComboBox : ComboBox { private const int MaxDropDownWidth = 600; private bool _dropDownWidthValid; private void AutoSizeComboBoxDropDown() { int maxWidth = 0; using (Graphics g = Graphics.FromImage(new Bitmap(1, 1))) { foreach (object o in Items) { if (o != null) { Size size = g.MeasureString(o.ToString(), Font, 0, new StringFormat(StringFormatFlags.NoWrap | StringFormatFlags.FitBlackBox)).ToSize(); maxWidth = Math.Max(maxWidth, size.Width); if (maxWidth >= MaxDropDownWidth) { maxWidth = MaxDropDownWidth; break; } } } } int newWidth = maxWidth + SystemInformation.VerticalScrollBarWidth + 2 * SystemInformation.BorderSize.Width; // This is a cheap hack to workaround the fact that the WinForms ComboBox // doesn't send a CB_SETDROPPEDWIDTH message to the control unless the value // has changed. We have to always send the message since the effective value // of the drop down width may have changed due to the width of the combobox // itself changing, and we want the new value. DropDownWidth = newWidth + 1; DropDownWidth = newWidth; } public void InvalidateDropDownWidth() { _dropDownWidthValid = false; } protected override void OnDropDown(EventArgs e) { if (!_dropDownWidthValid) { AutoSizeComboBoxDropDown(); _dropDownWidthValid = true; } base.OnDropDown(e); } protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); _dropDownWidthValid = false; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- StateRuntime.cs
- Select.cs
- NetworkInformationException.cs
- HitTestDrawingContextWalker.cs
- DataGridViewTextBoxEditingControl.cs
- SafeRegistryHandle.cs
- SqlMethodAttribute.cs
- GridViewColumn.cs
- ApplicationBuildProvider.cs
- DesignerActionUIStateChangeEventArgs.cs
- BaseTemplateBuildProvider.cs
- StrongNameKeyPair.cs
- SecurityPermission.cs
- CursorConverter.cs
- SoapFault.cs
- CodeGenerator.cs
- CodeDirectoryCompiler.cs
- CommonGetThemePartSize.cs
- XPathDescendantIterator.cs
- WebColorConverter.cs
- RequestCacheManager.cs
- WindowsSysHeader.cs
- FormViewUpdateEventArgs.cs
- TdsRecordBufferSetter.cs
- SequentialActivityDesigner.cs
- XmlSchemaCollection.cs
- XmlLanguage.cs
- DummyDataSource.cs
- GPStream.cs
- SafeJobHandle.cs
- DataGridItemAttachedStorage.cs
- StateRuntime.cs
- DataGridRowEventArgs.cs
- OverflowException.cs
- Trigger.cs
- UnknownWrapper.cs
- RemoteWebConfigurationHostServer.cs
- ProfileEventArgs.cs
- DataGridViewLinkColumn.cs
- RSACryptoServiceProvider.cs
- figurelength.cs
- CellQuery.cs
- StrokeIntersection.cs
- HexParser.cs
- AsyncPostBackErrorEventArgs.cs
- CellTreeNode.cs
- EntityReference.cs
- NodeInfo.cs
- MultipartIdentifier.cs
- EventData.cs
- RuleSet.cs
- ToolStripSplitStackLayout.cs
- CodeExpressionStatement.cs
- AppDomainGrammarProxy.cs
- ScrollBarAutomationPeer.cs
- Array.cs
- XmlNullResolver.cs
- DbXmlEnabledProviderManifest.cs
- LinkLabel.cs
- PropertyMapper.cs
- SerializationFieldInfo.cs
- NegationPusher.cs
- KerberosTicketHashIdentifierClause.cs
- EmptyEnumerator.cs
- InfoCardTraceRecord.cs
- ScrollBarAutomationPeer.cs
- RandomNumberGenerator.cs
- RangeValuePatternIdentifiers.cs
- ExtenderProvidedPropertyAttribute.cs
- HttpStreamFormatter.cs
- ProvidersHelper.cs
- FormViewUpdatedEventArgs.cs
- DataGrid.cs
- InkPresenterAutomationPeer.cs
- ProcessModelInfo.cs
- ContentPlaceHolder.cs
- SQLMoneyStorage.cs
- RuntimeEnvironment.cs
- StaticResourceExtension.cs
- Message.cs
- DiagnosticsElement.cs
- SqlUtils.cs
- ModuleBuilderData.cs
- CodeEventReferenceExpression.cs
- SqlFileStream.cs
- Rijndael.cs
- ToggleButtonAutomationPeer.cs
- ControlIdConverter.cs
- ModuleBuilderData.cs
- DoubleStorage.cs
- ProcessingInstructionAction.cs
- LowerCaseStringConverter.cs
- ReceiveContext.cs
- XmlImplementation.cs
- WebFaultClientMessageInspector.cs
- AttributedMetaModel.cs
- WorkflowQueue.cs
- FixedSchema.cs
- SchemaEntity.cs
- User.cs