как программно выбрать элемент в listview?

<p>я пытаюсь выбрать первый элемент в listview программным способом, но он, кажется, не был выбран. я использую следующий код:</p><pre><code>if (listview1.items.count > 0) listview1.items[0].selected = true; </code></pre><p>на самом деле у меня была эта проблема раньше, но я не могу вспомнить, как мне удалось ее решить!</p>

<p>скорее всего, выбран элемент <em>[</em>, вы просто не можете сказать, потому что фокус находится на другом элементе управления. есть несколько способов решить эту проблему, в зависимости от дизайна вашего приложения.</p><ol> <li><p>простое решение - сначала установить фокус на <code>listview</code> при отображении вашей формы. пользователь обычно устанавливает фокус на элементы управления, нажимая на них. однако вы также можете указать, какие элементы управления получают фокус программно. один из способов сделать это - установить для индекса вкладки элемента управления значение 0 (самое низкое значение указывает элемент управления, который будет иметь начальный фокус). вторая возможность - использовать следующую строку кода в событии <code>load</code> вашей формы или сразу после установки свойства <code>selected</code>:</p> <pre><code>mylistview.select(); </code></pre> <p>проблема с этим решением состоит в том, что выбранный элемент больше не будет выделен, когда пользователь устанавливает фокус на другой элемент управления в вашей форме (например, текстовое поле или кнопку).</p></li> <li><p>чтобы это исправить, вам нужно установить для свойства <a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.hideselection.aspx"><code>hideselection</code></a> элемента управления <code>listview</code> значение false. это приведет к тому, что выбранный элемент будет <em>оставаться выделенным</em>, даже если элемент управления потерял фокус.</p> <p>когда элемент управления <em>имеет</em> фокус, фон выбранного элемента будет окрашен цветом подсветки системы. когда элемент управления <em>не имеет</em> фокус, фон выбранного элемента будет окрашен в системный цвет, используемый для серого (или отключенного) текста.</p> <p>вы можете установить это свойство либо во время разработки, либо с помощью кода:</p> <pre><code>mylistview.hideselection = false; </code></pre></li> </ol>

<pre><code>if (listview1.items.count > 0) { listview1.items[0].selected = true; listview1.select(); } </code></pre><p>элементы списка не отображаются выбранными, если элемент управления не имеет фокуса (или для свойства <code>hideselection</code> установлено значение false)</p>

<p>я думаю, что проблема и решение были описаны коди грей! у меня есть дополнительная заметка.</p><p>пожалуйста, проверьте фокус указанного элемента списка (и элемент управления!). я мог бы установить фокус и выделение с помощью следующих строк кода:</p><pre><code>this.listview1.items[1].selected = true; this.listview1.items[1].focused = true; </code></pre><p>но сфокусированный контроль был условием! </p>

<pre><code> int i=99;//is what row you want to select and focus listviewramos.focuseditem = listviewramos.items[0]; listviewramos.items[i].selected = true; listviewramos.select(); listviewramos.ensurevisible(i);//this is the trick </code></pre>

<pre><code>listviewitem.isselected = true; listviewitem.focus(); </code></pre>

<p>я знаю, что это старый вопрос, но я думаю, что это окончательный ответ.</p><pre><code>listviewramos.items[i].focused = true; listviewramos.items[i].selected = true; listviewremos.items[i].ensurevisible(); </code></pre><p>если существует вероятность того, что элемент управления не имеет фокуса, но вы хотите навести его на элемент управления, вы можете добавить следующую строку.</p><pre><code>listviewramos.select(); </code></pre><p>почему microsoft не просто добавила метод <code>selectitem()</code>, который делает все это за вас, мне не понятно.</p>

<pre><code>if (listview1.items.count > 0) { listview1.focuseditem = listview1.items[0]; listview1.items[0].selected = true; listview1.select(); } </code></pre>