2016-07-20 8 views
0

Ich verstehe leider nicht, wie Sie die Auswahl erhalten. Ich überprüfte msdn und von dem, was ich sagen kann, vermisse ich wahrscheinlich eine Referenz oder etwas. Der Code selbst soll Wörter ersetzen, die in einer Schablone gefunden werden, wenn Sie ein Formularfeld ausfüllen. Ziemlich einfach und geradlinig.'Anwendung' enthält keine Definition für 'Auswahl'

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Word = Microsoft.Office.Interop.Word; 

namespace WindowsFormsApplication2 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     Word.Application objWord = new Word.Application(); 
     objWord.Visible = true; 
     object isVisible = true; 
     object readOnly = false; 
     Word.Document objDoc; 
     object Missing = System.Reflection.Missing.Value; 
     object fileName = @"C:\Users\jason\Documents\Custom Office Templates\MLA1.dotx"; 
     objDoc = objWord.Documents.Open(ref fileName, ref Missing, ref readOnly, ref Missing, ref Missing, ref Missing, ref Missing, ref Missing, ref Missing, ref Missing, ref Missing, ref isVisible, ref Missing, ref Missing, ref Missing, ref Missing); 

    } 


    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 


    private void SearchReplace() 
    { 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 



     Word.Find findObject = Application.Selection.Find; 
     findObject.ClearFormatting(); 
     findObject.Text = "Name"; 
     findObject.Replacement.ClearFormatting(); 
     findObject.Replacement.Text = textBox1.Text; 

     object replaceAll = Word.WdReplace.wdReplaceAll; 
     object missing = System.Reflection.Missing.Value; 
     findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing, 
      ref missing, ref missing, ref missing, ref missing, ref missing, 
      ref replaceAll, ref missing, ref missing, ref missing, ref missing); 

    } 
    } 
    } 
+0

Verschieben 'objWord' Erklärung außerhalb des' Form1' Konstruktor und verwenden 'objWord.Selection.Find' statt –

+0

Fantastic! das hat funktioniert. Wie auch immer, eine Idee, wie man Text in einem Header ändert? Habe noch nicht nachgeschaut und keine Sorgen, wenn du das nicht beantworten willst. Das wird morgen meine nächste Suche sein –

Antwort

0

Application ist ein Klassenname (auch wenn Sie in diesem Fall aliased haben, so dass die korrekte Klassenname ist Word.Application).

Selection ist eine Instanzeigenschaft dieser Klasse und kann daher nur über eine Instanz aufgerufen werden. Sie haben eine Instanz, objWord. Wenn Sie dies als eine Instanz Feld in Ihrem Formular deklariert, dann könnte man auf sie zugreifen aus dem Button-Klick-Handler:

public partial class Form1 : Form 
{ 
    private Word.Application objWord; 

    public Form1() 
    { 
     InitializeComponent(); 
     objWord = new Word.Application(); 
     // ... 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Word.Find findObject = objWord.Selection.Find; 
     // ... 
    } 

Als beiseite, wie von C# 4 der ref und alle Parameter sind optional für COM-Interop. Also diese Zeile:

objWord.Documents.Open(ref fileName, ref Missing, ref readOnly, ref Missing, ref Missing, ref Missing, ref Missing, ref Missing, ref Missing, ref Missing, ref Missing, ref isVisible, ref Missing, ref Missing, ref Missing, ref Missing); 

kann, wie unten beschrieben werden, die Verwendung von optional machen und benannte Argumente:

objWord.Documents.Open(fileName, ReadOnly: readOnly, IsVisible: isVisible); 
0

Sie müssen das Wort Instanz in einem Feld Ihrer Form1 Klasse speichern, so dass Sie später über den Zugang in die Schaltfläche Ereignishandler:

public class Form1 : Form 
{ 
    private Word.Application _wordApplication; 

    public Form1() 
    { 
     InitializeComponent(); 

     _wordApplication = new Word.Application(); 
     _wordApplication.Visible = true; 

     var fileName = @"C:\Users\jason\Documents\Custom Office Templates\MLA1.dotx"; 
     var document = _wordApplication.Documents.Open(fileName, ReadOnly:false, Visible: true); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     var findObject = _wordApplication.Selection.Find; 
     findObject.ClearFormatting(); 
     findObject.Text = "Name"; 
     findObject.Replacement.ClearFormatting(); 
     findObject.Replacement.Text = textBox1.Text; 

     object replaceAll = Word.WdReplace.wdReplaceAll; 
     object missing = System.Reflection.Missing.Value; 
     findObject.Execute(Replace: Word.WdReplace.wdReplaceAll); 
    } 
}