Чтобы определить, какое окно открыто, вы можете запросить свойство Form.ActiveMDIChild, чтобы получить ссылку на текущее активное окно. Оттуда вы можете сделать одну из двух вещей:
1) Если вы создаете свой собственный класс Form (например, FormFoo), который имеет новую открытую функцию-член GetCopiedData (), а затем наследуете все дочерние формы вашего приложения от этого класса, вы можете просто сделать что-то вроде этого: 1003 *
((FormFoo)this.ActiveMDIChild).GetCopiedData();
Предполагая, что функция GetCopiedData будет иметь реализацию, специфичную для формы, чтобы определить, какой текст следует скопировать в буфер обмена.
или
2) Вы можете использовать наследование, чтобы определить тип активной формы, а затем сделать что-то, чтобы получить скопированные данные в зависимости от типа формы:
Form f = this.ActiveMDIChild;
if(f is FormGrid)
{
((FormGrid)f).GetGridCopiedData();
} else if(f is FormText) {
((FormText)f).GetTextCopiedData();
}
и т.д.
Это должно помочь вам начать с поиска активного окна и того, как реализовать функцию копирования. Если вам нужна дополнительная помощь в копировании из GridView, лучше всего опубликовать еще один вопрос.