Сборник часто задаваемых вопросов и ответов
Мы начинаем собирать наиболее часто задаваемые в форумах вопросы и ответы. Пока их немного, но мы постоянно будем добавлять новые. По мере накопления вопросов и ответом планируем создать отдельные FAQs по каждому форуму.
Если у Вас есть пожелания по включению вопроса/ответа в FAQ - пишите пожалуйтста на info@gotdotnet.ru.
1. Как можно добавить новый узел в xml файл?
//reading xml file
XmlDocument doc = new XmlDocument();
doc.Load(sFileName);
// searching the node
sXPath = "Users";
oNode = doc.SelectSingleNode(sXPath);
if ( oNode != null )
{
//Creating new node
// User element
XmlElement eUser = doc.CreateElement("User");
// Name element
XmlElement eName = doc.CreateElement("Name");
// Appending
eUser.AppendChild(eName);
oNode.AppendChild(eUser);
}
2. Сохранение в XML-файл?
//reading xml file
XmlDocument doc = new XmlDocument();
doc.Load(sFileName);
// searching the node
XmlNode oNode = doc.SelectSingleNode(sXPath);
if ( oNode != null )
{
// updating the Text
oNode.InnerText = sNewValue;
// saving
doc.Save(sFileName);
}
3. Как проигрывать WAV-файл?
Такой возможности в .NET пока нет. Поэтому нужно импортировать что-нибудь из Win32 API, например PlaySound.
[System.Runtime.InteropServices.DllImport("Winmm.dll")]
public static extern int PlaySound(string pszSound, IntPtr hMod, long fdwSound);
const long SND_FILENAME = 0x00020000L;
//использование:
PlaySound("1.wav", IntPtr.Zero, SND_FILENAME);
4. Если задать BorderStyle.FixedSingle, то контрол опоясывает однопиксильная черная линия. Есть в природе какой-нибудь способ задать цвет этой линии?
Поставьте BorderStyle в BorderStyle.None затем подпишитесь на Paint и в нем при помощи класса ControlPaint отрисуйте нужный бордер.
void panel_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, ((Control)sender).ClientRectangle, Color.Red, ButtonBorderStyle.Solid);
}
5. Форматирование даты в контролах?
<%#(Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "MyDateField"))).ToString("dd.MM.yyyy")%>
6. Ошибка при установке студии?
После ввода номера жду пока там пишет Validating Install order... Please wait....
Потом выпадает
Setup Failed.
инсталяция не идет из-за того что в наименовании организации на которую зарегистрирована винда более одного слова ! Я изменил в реестре ОАО "Баня" на Баня и все пошло
7. Как получить список таблиц из БД через ADO.NET?
OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, null, "TABLE"});
8. Использование COMпонентов при помощи .NET?
Использование COMпонентов при помощи .NET
9. Как получить SID пользователя?
string queryString = "SELECT * FROM Win32_UserAccount WHERE Name = '" + SystemInformation.UserName + "'";
ManagementObjectSearcher userAccounts = new ManagementObjectSearcher(queryString);
foreach(ManagementObject userAccount in userAccounts.Get())
MessageBox.Show(userAccount.GetPropertyValue("SID").ToString());
10. Как создать в реестре параметр типа DWORD?
Dim CmdVisLines as RegistryKey
If registry..CurrentUser("Software\Prog1\Parametrs\")=Nothing then
CmdVisLines=RegistryKey.CreateSubKey("Software\Prog1\Parametrs")
end if
Dim intValue as System.Int32
intValue = 1
CmdVisLines.SetValue("CmdVisLines", intValue)
11. Как перерисовать иконку с помощью DrawIcon из полученного хендла в свой PictureBox?
Icon icon = Icon.FromHandle(hIcon);
...
graphics.DrawIcon(icon, 0, 0);
12. Как получить handle окна?
System.Diagnostics.Process.GetCurrentProcess().Handle
13. SDI/MDI в .Net?
У формы есть свойства Form.IsMdiContainer и Form.MdiParent.
14. Как сделать Splash Screen?
Splash Screen Example
15. Проблемы с кодировкой?
Пропиши в Web.config вот это:
<globalization
fileEncoding="windows-1251"
requestEncoding="windows-1251"
responseEncoding="windows-1251"
culture="ru-RU"
uiCulture="ru-RU"
/>
16. Пример TabStrip?
Tab Strip Control High Quality
17. Как получить размер рабочей области объекта DataGrid?
Ширина считается по формуле:
this.ClientSize.Width - <ширина рамки с обеих сторон> - SystemInformation.VerticalScrollBarWidth
<ширина рамки с обеих сторон> считается с помощью такой процедуры:
switch( this.BorderStyle )
{
case BorderStyle.FixedSingle:
_size_Border = SystemInformation.BorderSize;
break;
case BorderStyle.Fixed3D:
_size_Border = SystemInformation.Border3DSize;
break;
default:
_size_Border = Size.Empty;
break;
}
После чего в _size_Border.Width - ширина рамки с одной стороны.
18. Есть ли в классах .NET какой-нибудь выполняющий функции аналогичные вызову ShellExecute в WinAPI?
Process.Start()
19. Как вставлять картинки в DataGrid?
Нужно написать свой DataGridColumnStyle, переписать несколько методов (основной, конечно - Paint).
Пример
20. Сортировка в DataGrid?
<asp:BoundColumn HeaderText="Имя" SortExpression="Name" DataField="Name" />
Более подробную информацию можно найти здесь.
21. Как сделать собственную пиктограмму на панели инструментов?
Очень просто - задать классу атрибут ToolboxBitmap.
[ToolboxBitmap(typeof(CListView), "ListView.ico")]
public class CListView : ListView
Последовательность действий при добавлении своей пиктограммы к компоненту выглядит так:
- Добавить иконку в проект как "embedded resource".
- Задать классу атрибут "ToolboxBitmap".
- Удостовериться, что свойство проекта "Default Namespace" соответствует пространству имен искомого класса.
- Перекомпилировать проект.
22. При разработке использую тэг для самодокументирования <summary>. Как сделать так, чтоб они были видны, если сборку подключить к другой?
Нужно использовать опцию /doc:file для C# компилятора.
Для этого в свойствах проекта assembly, которую потом будешь использовать, добавь строку "<имя assembly>.xml" в поле Configuration Properties\Build\XML Documentation File.
И потом этот XML файл должен находиться в той же директории где и assembly (на которую ссылешься из проекта). В этом случае IntelliSence работает.
23. Как нарисовать треугольник(стрелку), показывающий направление сортировки в ListView при нажатии на ColumnHeader?
Нарисовать треугольник в ColumnHeader у ListView
24. Как загрузить картинки из датасета?
Response.ContentType = myDataReader.Item("PictContent")
Response.BinaryWrite(myDataReader.Item("picture"))
25. Как отследить нажатие клавиши на DataGrid?
Унаследуйтесь от DataGrid и в наследнике перекройте методы ProcessDialogKey() и ProcessKeyPreview() - в них и обрабатывайте нажатия.
26. Как вставлять разные control's в ListView?
Вот пример
27. Как в С# узнать имя локального хоста и его IP адрес?
//имя локального компьютера
string name = System.Net.Dns.GetHostName()
//его ip адреса (их может быть несколько)
System.Net.IPHostEntry he = System.Net.Dns.Resolve(name);
IPAddress[] al = he.AddressList;
28. ContextMenu с картинками?
У соответствующего MenuItem'a нужно поставить OwnerDraw в true и после этого можно рисовать в обработчике события MenuItem.DrawItem.
Подробней
29. Как в DataTable/DataView получить текущую запись?
BindingContext[dataSet.Tables["table_name"]].Current
30. Разбиение на страницы в DataGrid?
Необходимо вручную переключать страницы:
private void dgData_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
dgData.CurrentPageIndex = e.NewPageIndex;
BindGrid();
}
где BindGrid() - функция заполнения грида данными:
private void BindGrid()
{
System.Collections.ArrayList al = new System.Collections.ArrayList();
for(int i = 0; i < 45; i++)
al.Add(DateTime.Now.Millisecond());
dgData.DataSource = al;
dgData.DataBind();
}
|