Adding Dropdown to Sharepoint Webpart PropertiesCreate a Webpart and add custopm property
[WebBrowsable(false), Personalizable(PersonalizationScope.Shared)]
public string SearchPath
{
  get { return _searchPath; }
  set { _searchPath = value; }
}
Create a class and extend it from ToolPartprotected override void CreateChildControls()
{
 webpart = this.WebPartToEdit as WebpartClass;
 toolPanel = new Panel();
 toolPanel.CssClass = "ms-ToolPartSpacing";
 toolPanel.Controls.Add(GetToolPanel());
 this.Controls.Add(toolPanel);
 base.CreateChildControls();
}
public override void ApplyChanges()
{
 webpart = this.WebPartToEdit as WebpartClass;
 webpart.SearchPath = ddl.SelectedValue;
 base.ApplyChanges();
}
Other functions in the extended class of ToolPart
private Control GetToolPanel()
{
 toolPanelTable = new Table();
 toolPanelTable.CellPadding = 0;
 toolPanelTable.CellSpacing = 0;
 toolPanelTable.Style["border-collapse"] = "collapse";
 toolPanelTable.Attributes.Add("width", "100%");
 toolPanelTable.Rows.Add(GetUseDropDown());
 toolPanelTable.Rows.Add(GetSeperatorRow());
 return toolPanelTable;
}
private TableRow GetUseDropDown()
{
 TableRow row = new TableRow();
 TableCell cell = new TableCell();
 cell.Controls.Add(new LiteralControl("<div ><b>DropDownName</b></div>"));
 cell.Controls.Add(new LiteralControl("<div ><div <nobr>"));
 ddl = RecursiveParse(); //return the Dropdown List
 cell.Controls.Add(ddl);
 cell.Controls.Add(new LiteralControl("</nobr></div></div>"));
 row.Cells.Add(cell);
 return row;
}
private TableRow GetSeperatorRow()
{
 TableRow row = new TableRow();
 TableCell cell = new TableCell();
 cell.Controls.Add(new LiteralControl("<div style='width:100%' ></div>"));
 row.Cells.Add(cell);
 return row;
}