Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Cut/copy/paste

26K
22 декабря 2008 года
vitaliy_lyakh
33 / / 03.11.2007
Есть форма, на ней несколько textbox'ов и кнопки cut/copy/paste. Нужно реализовать их функциональность.

Если поставить shortcut'ы Ctrl-V, Ctrl-X, Ctrl-C на эти кнопки, толку нет, вариант вызова методов Cut/Copy/Paste текущего textbox'а отпадает.

Как вариант, вызывать по нажатию на эти кнопки соответствующие Winapi комманды, то же что и Ctrl-V, Ctrl-X, Ctrl-C делают, но как?

Спасибо
13K
22 декабря 2008 года
NomadicDMB
85 / / 20.03.2007
нашел в МСДН http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.selectall.aspx
надеюсь поможет
26K
22 декабря 2008 года
vitaliy_lyakh
33 / / 03.11.2007
Спасибо, но не подходит, так как я по определенным причинам не могу узнать текущий textbox, чтоб вызывать его методы
26K
22 декабря 2008 года
vitaliy_lyakh
33 / / 03.11.2007
Кстати, может можно как-нибудь узнать активное поле ввода в форме?
1.8K
01 января 2009 года
NextTime
217 / / 19.12.2007
Цитата: vitaliy_lyakh
Есть форма, на ней несколько textbox'ов и кнопки cut/copy/paste. Нужно реализовать их функциональность.

Если поставить shortcut'ы Ctrl-V, Ctrl-X, Ctrl-C на эти кнопки, толку нет, вариант вызова методов Cut/Copy/Paste текущего textbox'а отпадает.

Как вариант, вызывать по нажатию на эти кнопки соответствующие Winapi комманды, то же что и Ctrl-V, Ctrl-X, Ctrl-C делают, но как?

Спасибо



Если я тебя правильно понял... то тебе нужно использовать Clipboard... то есть системный буфер... Сохраняешь в буфер (аналог CTRL+C, Copy) - Clipboard.SetText("Text!!!"), Берешь из него через Clipboard.GetText(). Можно запоминать не только текст, но и звук и хоть что.... Поробнее в MSDN
P.S. Если при использовании Clipboard.GetText() функция возвращает саму себя, т.е. возвращает строку "Clipboard.GetText()", то буфер пуст и забирать оттуда нечего.
Скажи если помог:D

26K
08 января 2009 года
vitaliy_lyakh
33 / / 03.11.2007
Да, это тоже вариант, но можно и не обращаться к Clipboard, а просто ипользовать методы Cut(), Copy() и Paste() соответствующих полей ввода(меньше мороки будет). Но так как мне достаточно сложно узнать текущее поле ввода (и к тому же они разные - richtextbox, textbox, grid...), я думаю как-то сгенерировать по нажатию кнопок вызов системных событий - тех самых, которые вызываются при нажатии Ctrl+V, Ctrl+C, Ctrl+X (через WinApi). Знаю, что можно, но как?
5
08 января 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: vitaliy_lyakh
Спасибо, но не подходит, так как я по определенным причинам не могу узнать текущий textbox, чтоб вызывать его методы


Есть свойство у формы ActiveControl. Почему бы не использовать его?

Если же требуется поймать момент получения фокуса контролом, а из дизайнера всем контролам лениво устанавливать свойство Enter, то можно использовать такой код:

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication5 {
    public partial class Form1 : Form {
       
        public Form1() {
            InitializeComponent();
            ApplyEnterEvent(this, true, EnterEventHandeler);
        }

        private static void ApplyEnterEvent(Control control, bool recursive, EventHandler handler) {
            control.Enter += handler;
            if (recursive) {
                foreach (Control child_control in control.Controls)
                    ApplyEnterEvent(child_control, recursive, handler);
            }
        }

        private void EnterEventHandeler(object sender, EventArgs e) {
            if (sender is Control) {
                Text = (sender as Control).Text;
            }
        }

    }
}
При выполнении кода EnterEventHandler остается только разобрать кто такой sender.
26K
10 января 2009 года
vitaliy_lyakh
33 / / 03.11.2007
Цитата: hardcase
Есть свойство у формы ActiveControl. Почему бы не использовать его?



Ну у меня не просто контролы на форме - главная Wiew, дочерние(mdi), на ней другие вьюхи, а на них уже контролы. Кнопки Клипборда на главной вьюхе.

По событию Enter я передаю текущий контрол в модель (откуда доступны кнопки), если этот контрол приводится к TextEdit, и null в остальных случаях. Комманды клипборда работают, но другой вопрос - как менять кнопкам состояние? К примеру, по выделению текста должны активироваться cut и copy и т.д.

26K
12 января 2009 года
vitaliy_lyakh
33 / / 03.11.2007
Подвязываюсь на события KeyUp, MouseUp, Paint текущего поля ввода.

KeyUp - в случае выделения текста комбинацией Ctrl+A, или Shift+клавиши курсора.
MouseUp - выделение мышкой.
Paint - в случае вызова контекстного меню (и выбора Cut или Select All)

Через задницу, но работает.
1.8K
14 января 2009 года
NextTime
217 / / 19.12.2007
Ну вместе с методами Cut, Copy, Paste есть свойства (у RichTextBox точно, а вот у других элементов управления не помню) CanCopy, CanPaste, которые и означают, возможно ли копирование в буфер и есть ли в буфере данные для вставки.
Так же можно отследить как и я говорил через clipboard... Но не всегда.
Единственный вопрос остается: где делать проверку cancopy, canpaste...
26K
15 января 2009 года
vitaliy_lyakh
33 / / 03.11.2007
По выделению текста должны меняться состояния кнопок. У RichTextBox есть событие SelectionChanged, у обычных полей ввода его нет, поэтому и приходится подвязываться на несколько событий, реагирующих на действия пользователя.

В обработчике этих всех событий я и проверяю CanCopy, CanPaste...

Вывод - используйте RichTextBox'ы на форме, а TextBox'ы - в диалоговых окнах
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог